如何以编程方式替换IB中内置的UIToolBar项

fra*_*yer 12 iphone interface-builder uitoolbar

我有一个带有各种图像按钮的工具栏,在Interface Builder中创建.

我希望能够以编程方式在按下时用活动指示器替换其中一个按钮,然后放回原始按钮,但在活动完成时将其颜色从白色更改为黄色.

是否可以使用IB构建的工具栏,或者我是否必须以编程方式和自定义视图构建整个工具栏?

Aar*_*ron 26

这是我在类似情况下所做的一个例子.我想使用Interface Builder构建工具栏,但根据是否"检查"来切换其中一个BarButtonItem.在这个例子中,有几个关键的事情需要注意.为头文件中的类定义了以下2个成员变量:

NSMutableArray *toolbarItems;
IBOutlet UIToolbar *toolbar;
NSUInteger checkUncheckIndex;
Run Code Online (Sandbox Code Playgroud)

当我想更新已检查状态时,我调用此函数...请注意,当单击UIToolbar中的特定按钮时,会调用一个名为checkUncheckClicked的选择器.并且UIToolbar被设置为工具栏的IBOutlet.或者,您可以将UIBarButtonItem连接为插件本身,并将其用作逻辑来标识按钮的索引,或者就此而言,如果事物不会随时间发生变化,您可以对按钮的索引进行硬编码.最后,有一个checked.png和unchecked.png交替,它包含在项目中.

- (void)updateBarButtonItemChecked:(BOOL)checked {
    if (toolbarItems == nil) {
        toolbarItems = [[NSMutableArray arrayWithArray:toolbar.items] retain];
        checkUncheckIndex = -1;

        for (NSUInteger i = 0; i < [toolbarItems count]; i++) {
            UIBarButtonItem *barButtonItem = [toolbarItems objectAtIndex:i];
            if (barButtonItem.action == @selector(checkUncheckClicked)) {
                favoriteIndex = i;
                break;
            }
        }
    }

    if (checkUncheckIndex != -1) {
        UIBarButtonItem *barButtonItem = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:checked ? @"checked.png" : @"unchecked.png"] 
                                                                           style:UIBarButtonItemStylePlain target:self action:@selector(checkUncheckClicked)] autorelease];
        [toolbarItems replaceObjectAtIndex:checkUncheckIndex withObject:barButtonItem];

        toolbar.items = toolbarItems;
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,toolbarItems和工具栏应该在你的dealloc中为类释放.

希望这可以帮助!