0

UINavigationBar をセットアップしていますが、ボタンに問題があります。私がこれを行うとき:

-(void)addLeftButton:(NSString *)titl
{
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:titl style:UIBarButtonItemStyleBordered target:self action:@selector(haikuInstructions)];
self.titleOfNavItem.leftBarButtonItem = button;
}

その後、すべてがうまくいきます。しかし、私がこれを行うと:

-(void)addLeftButton:(NSString *)titl callingMethod:(NSString *)method
{
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:titl style:UIBarButtonItemStyleBordered target:self action:@selector(method)];
self.titleOfNavItem.leftBarButtonItem = button;
}

次のように別のメソッドでメソッドを呼び出します。

[self addLeftButton:@"Instructions" callingMethod:@"haikuInstructions"];

unrecognized selectorエラーが発生します。私が間違っていることについて何か考えはありますか?

4

1 に答える 1

3

使用する必要がありますNSSelectorFromString(NSString *aSelectorName)

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:titl style:UIBarButtonItemStyleBordered target:self action:NSSelectorFromString(method)];

編集: 詳しく説明すると、@selectorディレクティブは括弧内の名前を文字通り扱います。さらに、そのメソッドが実際に存在するかどうかを確認しません。これは、変数を使用@selector(method)して変数を持っている場合、名前付きセレクターではなく、NSString *method = @"haikuInstructions"名前付きセレクターを指すことを意味します。"haikuInstructions""method"

于 2012-08-11T22:12:05.963 に答える