2012-01-09 16 views
5

iosアプリケーションのUIButtonのアクションを変更しようとしています。私は残念ながらこのコードノートワーキングこのUIButtonのアクションを変更することは可能ですか?

[button addTarget:self action:@selector(aMethodHide:) forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Hide View" forState:UIControlStateNormal]; 

をしました。だから、このボタンのアクションを変更したい特定のセクションのコード

button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    [button addTarget:self action:@selector(aMethodShow:) forControlEvents:UIControlEventTouchDown]; 

    [button setTitle:@"Show View" forState:UIControlStateNormal]; 

    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 

    [view addSubview:button]; 

に続いたのですか?

+0

に役立つと思います初めて?あなたがそれを変更すると、aMethodHideは動作していませんか? –

+0

2つのアクションは、ボタンの同じイベント(クリック)を取っている、どのように最初のターゲットを削除することができます。 –

+0

クリックすると、両方のメソッドが呼び出されていますか? –

答えて

17

新しいターゲットを追加する前に、まずremoveTargetUIbuttonオブジェクトに呼び出し、新しいターゲットに他のアクションを追加することをお勧めします。

+0

このファンクションが同じイベントに対して呼び出された理由 –

2

2つのターゲットを使用する代わりに、同じアクションターゲットを使用できます。一つのターゲットでは、宛先1が最初にYESに設定した値BOOL値であり、ここで

-(void)btnAction 
{ 
     if(target1) 
      { 
      // code for target 1 
      } 

     else 
     { 
      // code for target 2 
     } 

} 

の下のように区別しなければなりません。また、ターゲット2のコードを実行するときはいつでも、値 NOを変更してください。

これがあなたを助けてくれることを願っています。

+0

条件をチェックしたくない場合、別のセレクタ(showButton、HideButtonなど)で複数回ターゲットを設定している場合は、すべてのアクションがsimultaniously呼び出されます。なぜですかこれは幸せ? –

0

私は最近アプリを作って同じ状況になっていましたが、それを解決する別の方法を見つけましたので、同じ状況にある可能性のある人と私のソリューションを共有することにしました。

私はこの質問のコンテキストに何をしたかを説明しようとするでしょう

:私はbuttonニーズを呼び出すための機能の一つで、それに関連してbuttonにタグを追加しました

  • aMethodShow:例えば)。

  • buttonは、常に同じ機能(たとえばcallSpecificFunc:)を呼び出します。 callSpecificFunc:は現在のbuttonタグに従ってaMethodShow:またはaMethodHideのいずれかの関数を呼び出します。

  • buttonが異なる機能を呼び出す必要がある特定のセクションでは、私はbuttonのタグのみを変更します。

このような何か:もちろん

NSInteger tagOne = 1000; //tag associated with 'aMethodShow' func 
NSInteger tagTwo = 1001; //tag associated with 'aMethodHide' func 

button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self action:@selector(callSpecificFunc:) forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Show View" forState:UIControlStateNormal]; 
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 
[view addSubview:button]; 

... 
// in some part of code, if we want to call 'aMethodShow' function, 
// we set the button's tag like this 
button.tag = tagOne 

... 

//Now, if we want to call 'aMethodHide', just change the button's tag 
button.tag = tagTwo 

... 

-(void) callSpecificFunc:(UIButton*)sender 
{ 
    NSInteger tagOne = 1000; 
    NSInteger tagTwo = 1001; 

    if([sender tag] == tagOne){ 
     //do whatever 'aMethodShow' does 
    }else { 
     //do whatever 'aMethodHide' does 
    } 
} 

それは2つの以上の機能のためにも適用することができる:)

8

私はそれはあなたにaMethodShowが働いている

[yourButton removeTarget:nil 
       action:NULL 
    forControlEvents:UIControlEventAllEvents]; 

[yourButton addTarget:self 
       action:@selector(yourAction:) 
    forControlEvents:UIControlEventTouchUpInside]; 
関連する問題