这是我的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
时,没有任何反应。没错,纳达。我输入了一个断点,它永远不会到达选择器引用的方法。
我在调用选择器的方式上做错了吗?
谢谢!
答案 0 :(得分:24)
您的按钮声明缺少某些内容,即target
参数。试试这个:
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"+ Contact"
style:UIBarButtonItemStylePlain
target:self
action:@selector(showPicker:)];
[self.navigationItem setLeftBarButtonItem:item animated:YES];
这假设showPicker:
实际上是在将该按钮添加到导航项的同一个类中。
target
参数是应该处理事件的实例。
答案 1 :(得分:3)
对于那些仍然遇到问题的人,我发现了另一个解决方案: 而不是这样做:
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
。 (或者您可以在此代码集之前以编程方式创建自己的UIBarButtonItem
,并将其添加到UIToolbar的项数组中。)
不知何故, ageektrapped 的解决方案对我来说不起作用,尽管他的解决方案是我宁愿使用的。也许更了解UIBarButtonItems的人可以评论为什么一个解决方案比另一个解决方案有效?
答案 2 :(得分:2)
“target”应该是选择器所属的对象,而不是nil。