以编程方式创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的工作?