@Selector未在UIBarButtonItem中触发

时间:2013-04-25 20:21:24

标签: ios inheritance selector subclass uibarbuttonitem

上下文

  • 该应用正在使用UINavigationController范例
  • 我有一个子类'UIViewController'的类叫做: QuestionViewController
  • 然后我有一个viewController,它调用了QuestionViewController的子类: QuestionMultipleChoiceViewController
  • 在QuestionViewController中我有一个名为: returnBarButtonItems 的公共方法,它返回一个NSArray
  • 在QuestionMultipleChoiceViewController中,我将self.toolbarItems属性设置为returnBarButtonItems返回的数组
  • 操作在超类 - QuestionViewController

代码

QuestionViewController:

-(NSArray*)returnBarButtonItems
{
    self.facebookItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"FacebookIcon.png"] style:UIBarButtonItemStylePlain target:nil action:@selector(facebookAction:)];
    self.leftarrow = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"LeftArrowIcon.png"] style:UIBarButtonItemStylePlain target:nil action:@selector(leftAction:)];
    self.rightarrow = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"RightArrowIcon.png"] style:UIBarButtonItemStylePlain target:nil action:@selector(rightAction:)];
    self.calcItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"CalculatorIcon.png"] style:UIBarButtonItemStylePlain target:nil action:@selector(calculatorAction:)];

    UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

    self.items = [NSArray arrayWithObjects:self.facebookItem, flexibleSpace, self.leftarrow, flexibleSpace,flexibleSpace,flexibleSpace,flexibleSpace, self.rightarrow,flexibleSpace, self.calcItem, nil];

    return self.items;
}

QuestionMultipleChoiceViewController:

self.toolbarItems = [self returnBarButtonItems];

问题

UIBarButtons设置正确并显示,但按下时不会调用操作。

1 个答案:

答案 0 :(得分:0)

函数initWithImage:style:target:action:的{​​{3}}表示:

  

     

接收操作消息的对象。

     

动作

     

选择此项目时发送到目标的操作。

在您的情况下,您将nil指定为目标,导致操作发送到nil,这就是您的方法未被解雇的原因。将nil替换为self以更正问题。