今天我开始在Xcode中搞乱Storyboarding,有一个问题让我感到愚蠢:
我有一个带导航控制器的故事板和一个表视图作为其根视图。现在我在导航栏中添加了一个条形按钮项。由于我希望此按钮具有自定义背景,因此我通过在“自定义类”字段中选择我的类的名称将自定义的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”,但似乎这个也没有被调用...
我做了很多搜索,但没找到合适的东西,虽然我确信这是基本的东西。所以请道歉。 :)
答案 0 :(得分:0)
Interface Builder将始终调用initWithCoder:
。这是有道理的,因为IB /故事板文件实际上是必须被解码的XML编码文件。
我通常定义自己的initialize
方法,并从任何重写的init方法调用它。