界面构建器中UIBarButton的自定义背景图像

时间:2012-11-18 18:06:27

标签: objective-c ios interface-builder storyboard uibarbuttonitem

今天我开始在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”,但似乎这个也没有被调用...

我做了很多搜索,但没找到合适的东西,虽然我确信这是基本的东西。所以请道歉。 :)

1 个答案:

答案 0 :(得分:0)

Interface Builder将始终调用initWithCoder:。这是有道理的,因为IB /故事板文件实际上是必须被解码的XML编码文件。

我通常定义自己的initialize方法,并从任何重写的init方法调用它。