在我的UIViewController中,我想在工具栏中添加一个UIBarButtonItem,但不会出现新的Button。我做错了什么?
- (void)doLogin:(NSString *)name password:(NSString *)password {
// 1.: start the Thread:
NSInvocationOperation *invOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(backgroundTaskLogin:) object:request];
[self.opQueue addOperation:invOperation];
}
- (void)backgroundTaskLogin:(NSString *)request2 {
// 2.: jump back in the Main Thread in show a cancel button in den toolbar:
[self performSelectorOnMainThread:@selector(showCancelButton) withObject:nil waitUntilDone:NO];
}
- (void)showCancelButton {
// 3.: add a new Cancel-Button in the Toolbar:
UIBarButtonItem *tempButtonCancel = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelLogin)];
NSMutableArray *myButtons = (NSMutableArray *)self.toolbarItems;
NSLog(@"Count buttons: %d", [self.toolbarItems count]); // DEBUGGER: 2
[myButtons addObject:tempButtonCancel];
[tempButtonCancel release];
NSLog(@"Count buttons: %d", [self.toolbarItems count]); // DEBUGGER: 3
// PROBLEM: I don't see the new Toolbar-Button :-(
}
答案 0 :(得分:2)
您不能依赖self.toolbarItems
是一个可变数组。如果您之前为该属性分配了一个可变数组,那么可能就是这种情况,但如果您不使用文档化的界面,则不能指望视图控制器注意到属性的更改。
创建一个新数组并使用setter将其分配给toolbarItems
:
NSMutableArray *newToolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems];
[newToolbarItems addObject:tempButtonCancel];
self.toolbarItems = newToolbarItems;
答案 1 :(得分:0)
Ole的帖子中的代码将修复你的错误,但不是因为他建议的原因(因为看起来你 成功地将一个项目添加到数组中,即使它不应该是可变的大多数时候)。在复制和修改items数组之后,您必须调用setToolbarItems:
,因为UIToolbar没有检测到对其数组进行了更改。
你也可以使用setToolbarItems:animated:
很好地淡化事物; - )