以编程方式创build的UIBarButtonItem不启动select器动作
这是我的UIBarButton
:
[self.navigationItem setLeftBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"+ Contact" style:UIBarButtonItemStylePlain target:nil action:@selector(showPicker:)] animated:YES];
这是它应该启动的代码:
- (void)showPicker:(id)sender { ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; picker.peoplePickerDelegate = self; [self presentModalViewController:picker animated:YES]; [picker release]; }
当我启动应用程序,并点击“+联系” UIBarButton
,没有任何反应。 没有错误,纳达。 我把一个断点,它永远不会到达select器引用的方法。
我是否以我调用select器的方式做错了什么?
谢谢!
你的button的声明是缺less的东西,即target
参数。 尝试这个:
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"+ Contact" style:UIBarButtonItemStylePlain target:self action:@selector(showPicker:)]; [self.navigationItem setLeftBarButtonItem:item animated:YES];
这假定showPicker:
实际上是在将button添加到导航项目的同一个类中。
target
参数是应该处理事件的实例。
“目标”应该是select器所属的对象,而不是零。
对于那些仍然遇到麻烦的人来说,下面是我find的另一个解决scheme:而不是这样做:
self.myBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Woot Woot" style:UIBarButtonItemStyleBordered target:self action:@selector(performActionForButton)];
尝试这样的事情:
NSArray *barButtons = [self.myToolbar items]; UIBarButtonItem *myBarButton = [barButtons objectAtIndex:0]; [myBarButton setAction:@selector(performActionForButton)];
*确保你在Storyboard的工具栏中添加了这个UIBarButtonItem
。 (或者你可以在这组代码之前以编程方式创build自己的UIBarButtonItem
,并将其添加到UIToolbar的items数组中。
不知何故, ageektrapped的解决scheme不适合我,虽然他的解决办法是我宁愿使用。 也许有人对UIBarButtonItems有更多的了解,可以评论为什么一个解决scheme在另一个解决scheme的工作?