以编程方式创建UIBarButtonItem Not Launching Selector Action

时间:2011-07-12 18:55:50

标签: objective-c ios xcode uinavigationcontroller uibarbuttonitem

这是我的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时,没有任何反应。没错,纳达。我输入了一个断点,它永远不会到达选择器引用的方法。

我在调用选择器的方式上做错了吗?

谢谢!

3 个答案:

答案 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。