1

今日、私はXcodeでストーリーボードをいじり始めましたが、そのような問題が1つあります。

ルートビューとしてナビゲーションコントローラーとテーブルビューを備えたストーリーボードがあります。次に、ナビゲーションバーにバーボタンアイテムを追加しました。このボタンにカスタムの背景を持たせたかったので、「カスタムクラス」フィールドでクラスの名前を選択して、カスタムUIBarButtonItemクラスをこのボタンに割り当てました。

クラス自体は次のようになります。

- (id)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action
{
    self = [super initWithTitle:title style:style target:target action:action];

    if (self) {
        [self setBackgroundImage:[self buttonBg] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    }
    return self;
}

- (id)initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action
{
    self = [super initWithImage:image style:style target:target action:action];

    if (self) {
        [self setBackgroundImage:[self buttonBg] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    }
    return self;
}

- (UIImage *)buttonBg
{
    return [[UIImage imageNamed:@"navBarButton.png" ] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 6, 15, 6)
                                                                     resizingMode:UIImageResizingModeTile];
}

プログラムでボタンを追加することを想定してこのクラスを作成しました。もちろん、これは自分で初期化子を呼び出すことができるので機能します。問題は、どのイニシャライザがInterface Builderによって呼び出されているのかわからないことです。基本的な「init」を上書きしようとしましたが、これも呼び出されていないようです…</ p>

私はたくさんの検索をしましたが、これは基本的なものであると確信していますが、適切なものは見つかりませんでした。どうぞお詫び申し上げます。:)

4

1 に答える 1

0

InterfaceBuilderは常にを呼び出しますinitWithCoder:。IB /ストーリーボードファイルは実際にはデコードする必要のあるXMLエンコードファイルであるため、これは理にかなっています。

私は通常、独自のinitializeメソッドを定義し、オーバーライドされたinitメソッドからそれを呼び出します。

于 2012-11-18T18:24:24.920 に答える