0

leftBarButtonItem のアクションをスワップしようとしています

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    UIBarButtonItem *theButton = self.navigationItem.leftBarButtonItem;

    // 'UIBarButtonItem' may not respond to 'removeTarget:action:forControlEvents:'
    [theButton removeTarget:self action:@selector(revealToggle:)          forControlEvents:UIControlEventTouchUpInside];

    // 'UIBarButtonItem' may not respond to 'removeTarget:action:forControlEvents:'
    [theButton addTarget:self    action:@selector(closeToggle:) forControlEvents:UIControlEventTouchUpInside];

    // BUT THIS DOES WORK
    [theButton.target performSelector:theButton.action];

}

私が読んだことによると、それはうまくいくはずです-何が間違っていますか?

実際、これは私が理解できないもっと複雑なものへの回避策です。

UINavigation Controller 内にある現在の UIViewController からメッセージを送信したいと考えています。

UINavigationController にはこのボタンがあります

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"btnmenu.png"] style:UIBarButtonItemStylePlain target:self.navigationController.parentViewController action:@selector(revealToggle:)];

これは正常に動作します。私が本当にやるべきことは

[self.navigationController.parentViewController closeToggle];

didSelectRowAtIndexPath関数内から、失敗しましたが、[theButton.target performSelector:theButton.action]で同じ効果を達成することができました

4

1 に答える 1

0

コメントで述べたように、はメソッドをUIBarButtonItem継承しないため、 およびUIControlに対する警告です。代わりに、 new を直接割り当てます:addTargetremoveTargetUIBarButtonItem

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"btnmenu.png"] style:UIBarButtonItemStylePlain
                     target:self.navigationController.parentViewController action:@selector(clearToggle)];

また、ターゲットのUIBarButtonItem closeToggle:に対して定義されたセレクターの違いにも注意してください。しかし、あなたがやりたいと言ったのは、closeToggleの親コントローラーにメッセージを送信することです。パラメーターを期待するため、そこにあるコロンはまったく異なります。closeToggle:メソッドが is の場合にアクションを実行するcloseToggleと、クラッシュが発生し、その逆も同様です。

-(void)closeToggle:(id)sender // your UIBarButtonItem action.
-(void)closeToggle            // which is, [self.navigationController.parentViewController closeToggle];

必要なメソッドを決定し、上記の新しい署名に従ってくださいUIBarButtonItem

お役に立てれば。

于 2012-06-14T15:50:09.893 に答える