2011-10-19 11 views
2

なぜこれは機能しませんか?新しいビューコントローラのcloseBtnが、現在のビューコントローラでdismiss:というメソッドを呼び出すようにします。ios - 別のビューコントローラ内のボタンにターゲットを追加する

NewViewController *newVC = [[NewViewController alloc] initWithNibName:@"NewViewController" bundle:[NSBundle mainBundle]]; 

[newVC.closeBtn addTarget:self action:@selector(dismiss:) forControlEvents:UIControlEventTouchUpInside]; 

dismiss:メソッドは、現在のView Controllerでは呼び出されません。 closeBtnはNewViewControllerのプロパティとして正しく設定され、.xibファイルにリンクされます。

+0

ボタンが有効になっていますか? –

+0

initWithNibNameの直後に、newVC.closeBtnがnullでないことを確認しましたか? – magma

+0

ビューコントローラを表示するまでボタンはゼロになります。ターゲットとセレクタをいくつかのivarsに保存し、viewDidLoadメッセージでそれらを再割り当てする必要があります。より良い説明が必要な場合は、完全な回答を追加します。 –

答えて

-1

一般的に、これはメソッドやUI要素を処理するための良い方法ではありません。

しかし、これは醜いですが、あなたはこのようなことをすることができます。

[yourButton addTarget:self action:@selector(yourButtonPressed:) forControlEvent:UITouchUpInside];

- (void) yourButtonPressed:(id)sender { 
    OtherVC* otherVC = [OtherVC alloc] [email protected]"NewViewController"] ... 
    [otherVC theDesiredMethod]; 
    [otherVC release]; 
} 

これは、おそらく正しいVCに関数を移動するほうが良いです動作しますが、本当に良いではありません。

希望に役立ちます。

3

別のコントローラのオブジェクトを作成し、addTargetで指定します。 actionパラメーターにメソッドの名前を付けます。 つまりanotherController * obj; [ボタンaddTarget:objアクション:@ Selector(MethodName)forControlEvents:UIControlEventTouchDown];

関連する問題