2 UIBarButtonItem使用相同的自定义视图只添加一次

时间:2014-02-08 02:08:36

标签: ios objective-c cocoa-touch uitoolbar

我想在UIToolBar的项目之间添加一条细线,所以我正在创建一个带有自定义视图的UIBarButtonItem,如下所示:

UILabel *separatorLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 1, 44)];
separatorLabel.backgroundColor = [UIColor colorWithRGB:0xe5edec];
UIBarButtonItem *separator = [[UIBarButtonItem alloc] initWithCustomView:separatorLabel];

然后我将我的分隔符添加到items数组中:

[items addObjectsFromArray:[NSMutableArray arrayWithObjects:someButton1, separator, somebutton2, separator, someButton3, nil]];

我认为这会在我的工具栏中添加2个分隔符,但它只会在最后添加一个。这是为什么?

我可以通过创建2个重复标签和UIBarButtonItem来解决这个问题,但还有其他更好的方法吗?

2 个答案:

答案 0 :(得分:0)

是的,您刚刚创建了一个UIBarButtonItem对象,因此显示了一个。 我认为更好的方法是使用自定义标签创建UIBarButtonItem子类,然后创建子类的两个对象。 我希望我的回答可以帮到你。

答案 1 :(得分:0)

UIView的任何给定实例只能在视图层次结构中出现一次。如果您考虑UIView上定义的API,这是相当明显的。例如,UIView具有frame属性,用于定义超级视图中的位置。如果查看出现在两个地方,frame属性就没有意义。

所以你需要多个实例。您可以通过定义创建分隔符的方法来简化代码:

- (UILabel *)newSeparator
{
    UILabel *separatorLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 1, 44)];
    separatorLabel.backgroundColor = [UIColor colorWithRGB:0xe5edec];
    UIBarButtonItem *separator = [[UIBarButtonItem alloc] initWithCustomView:separatorLabel];
    return separator;
}

然后你可以像这样添加你的项目:

[items addObjectsFromArray:@[button1, [self newSeparator], button2, [self newSeparator]];

此外,如果您只显示背景颜色,则无需使用UILabel。您可以使用UIView