0

私はこれが初心者の質問であることを知っていますが、私は初心者なので、ここに行きます:

私はアプリ全体(ボタン、ラベルなど)でChalkdusterフォントをかなり多く使用したいと考えており、これを実現するためにUILabelをサブクラス化しようとしました。Default.hには次のものがあります。

#import <UIKit/UIKit.h>

@interface Default : UILabel
{
UILabel *theLabel;
}

@property (nonatomic, strong) IBOutlet UILabel *theLabel;

@end

そしてこれは私の.mにあります:

#import "Default.h"

@implementation Default

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    // Initialization code


UIFont *custom = [[UIFont alloc] init];

custom = [UIFont fontWithName:@"Chalkduster" size:18];

self.font = custom;


NSLog(@"h");
}
return self;
}

@end

Interface Builderでクラスを変更して実行すると、Chalkdusterフォントが表示されません。時間を大幅に節約できると信じているので、この設定を手伝っていただければ幸いです。乾杯。

4

3 に答える 3

11

修正すべきいくつかの問題:

1)あなたはラベルであるという考えとラベルを含むという考えを混同しDefault Default ます。サブクラス化するには、クラス内のプロパティを削除し、 (セクション内で)selfではなくに変更を加えます。theLabelif (self) {

2)無条件の後にコーディングしたreturnものは実行されません...そして、コンパイラがそれらのステートメントについて文句を言わなかったことに驚いています。

編集:...そして私にちょうど夜明けしたもう1つのこと。

3)xibまたはストーリーボードからロードしている場合、初期化はではinitWithCoder:なくによって実行されるため、次のinitWithFrame:ようになります。

- (id)initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];
    if (self) {
        self.font = [UIFont fontWithName:@"Chalkduster" size:18];
    }
    return self;
}
于 2012-06-25T14:18:58.303 に答える
9

UILabelまず第一に、あなたが正しくサブクラス化しているとは思いません。だから私はあなたのためにそれを行う方法を説明するチュートリアルを作りました。サブクラス化されたIBOutletオブジェクトは必要ありません。自分で電話してください。例:self.font = ...サブクラス化する場合は、次のようにUILabelします。

次のように、 myLabelというタイトルの新しいクラスを作成します。

.h

#import <UIKit/UIKit.h>

@interface MyLabel : UILabel {

}

@end

.m

#import "MyLabel.h"

@implementation MyLabel

-(void)awakeFromNib {

    UIFont *custom = [[UIFont alloc] init];
    custom = [UIFont fontWithName:@"Chalkduster" size:18];

    self.font = custom;
}

@end

次に、ストーリーボードで[ラベル]を選択し、インデントインスペクターに移動し、[カスタムクラス]で上記の作成済みクラスを選択します。このような:

スクリーンショット

出力:

スクリーンショット2

注:カスタムを割り当てることを忘れないでください。

于 2012-06-25T15:40:27.810 に答える
3

return self;3行下に移動します。カスタム初期化を行う前に、initメソッドから戻ります。

コメントからの新しい情報を反映するように編集します。

ペン先からビューを逆シリアル化するときは、オーバーライドする必要もありますinitWithCoder:

于 2012-06-25T14:17:25.473 に答える