【问题标题】:Programmatically created UIBarButtonItem Not Launching Selector Action以编程方式创建的 UIBarButtonItem 未启动选择器操作
【发布时间】:2011-07-12 18:55:49
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 只要showPicker 确实有一个参数,选择器就可以了。
  • 解决方案是target = self,而不是target = nil

标签: objective-c ios xcode uinavigationcontroller uibarbuttonitem


【解决方案1】:

按钮的声明缺少一些东西,即target 参数。试试这个:

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"+ Contact" 
                                 style:UIBarButtonItemStylePlain 
                                target:self 
                                action:@selector(showPicker:)];
[self.navigationItem setLeftBarButtonItem:item animated:YES];

这假定showPicker: 实际上与将按钮添加到导航项的类属于同一类。

target 参数是应该处理事件的实例。

【讨论】:

  • 是的,解决了!第一次以编程方式执行此操作。感谢修复!
  • 别忘了把这个标记为答案,那么每个人都会赢!谢谢。
  • 是的,现在全部完成。我本来打算早点做的,但它不允许我这样做(即,在我做之前还有 9 分钟......)。感谢您的快速回复!
【解决方案2】:

对于那些仍然有这个问题的人,这是我找到的另一个解决方案: 而不是这样做:

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 的 items 数组中。)

不知何故,ageektrapped 的解决方案对我不起作用,尽管我更愿意使用他的解决方案。也许对 UIBarButtonItems 更了解的人可以评论为什么一种解决方案优于另一种解决方案?

【讨论】:

    【解决方案3】:

    “目标”应该是选择器所属的对象,而不是 nil。

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多