1

環境

  • アプリは UINavigationController パラダイムを使用しています
  • 「UIViewController」をサブクラス化するクラスがあり、QuestionViewControllerと呼ばれます。
  • 次に、QuestionViewController をサブクラス化する viewController を呼び出します。QuestionMultipleChoiceViewController
  • QuestionViewController には、NSArray を返すreturnBarButtonItemsというパブリック メソッドがあります。
  • 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 は正しく設定され、表示されますが、アクションは押されても呼び出されません。

4

1 に答える 1

0

関数のドキュメントinitWithImage:style:target:action:には、次のように記載されています。

目標

アクション メッセージを受け取るオブジェクト。

アクション

この項目が選択されたときにターゲットに送信するアクション。

あなたの場合nil、ターゲットとして割り当てているため、アクションがに送信されnilます。そのため、メソッドが起動されません。問題を修正するには、にnil置き換えます。self

于 2013-04-25T20:51:39.357 に答える