1

今天我开始在 Xcode 中搞乱 Storyboard,有一个问题让我觉得很愚蠢:

我有一个带有导航控制器和表视图作为其根视图的故事板。现在我在导航栏中添加了一个条形按钮项。因为我希望这个按钮有一个自定义背景,所以我通过在“自定义类”字段中选择我的类的名称来将我的自定义 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

Interface Builder will always call initWithCoder:. It makes sense, as the IB / storyboard file is actually an XML-encoded file that has to be decoded.

I usually define my own initialize method and call that from any overridden init methods.

于 2012-11-18T18:24:24.920 回答