0

selectorビューに2つのボタンがあります。イベントは、それぞれのボタン間で交換する必要があります。

言い換えれば(コードではありません):

button1セレクター=button2セレクター;

button2セレクター=button1セレクター;

編集

イベントはそれが何であれ、2つのボタン間のスワップを担当するコードアクションは私が必要とするものです

私が必要なのは:

1-セレクターを削除して保存し、他のボタンに使用する方法

2-保存したセレクターをボタンセレクターとして使用する方法

PS

私のコードでは、button1とbutton2には、2つのボタンを含むビューに入る前に、ユーザーの選択に基づいて9つのセレクターからランダムなセレクターがあります。

4

4 に答える 4

2

私は通常、どこかにBOOLを作成し、それがtrueかどうかを確認して、必要な場所にコードを指示します。

-(IBAction)button1:(id)sender {

    if (boolIsTrue) {
        // do this
    }
}

-(IBAction)button2:(id)sender {

    if (!boolIsTrue) {
        // do this
    }
}

そのようなものが機能します。

于 2012-10-09T15:06:20.673 に答える
1

両方のボタンに同じセレクターを使用することを検討してください。
これにより、コードがはるかにエレガントになり、保守が容易になります。動的セレクターがなく(デバッグが少なくなり)、すべてのケースが同じコードブロックに含まれます。結局のところ、「送信者」(UIButton自体)があります。
2つのボタンは、タグ(コードでボタンを作成する場合は#defined)、または保持されているボタン(選択)と比較することで区別できます。

-(IBAction)selectorForBothButtons:(id)sender 
{

if ((UIButton*)sender.tag == FIRST_BUTTON_TAG ) {
    if (!shouldSwapActions) {
        do_something; 
    } else {
        do_something_else ; 
    } 
} else { //second button 
    other_actions..  
}
}
于 2012-10-09T15:39:57.813 に答える
0

これは、各ボタンのターゲットに関連付けられているアクションが1つしかないことを前提としています(と想定されますself)。

NSString *oldAction1String = [[button1 actionsForTarget:self forControlEvent:UIControlEventTouchUpInside] objectAtIndex:0];
NSString *oldAction2String = [[button2 actionsForTarget:self forControlEvent:UIControlEventTouchUpInside] objectAtIndex:0];

SEL oldAction1 = NSSelectorFromString(oldAction1String);
SEL oldAction2 = NSSelectorFromString(oldAction2String);

[button1 removeTarget:self action:oldAction1 forControlEvents:UIControlEventTouchUpInside];
[button1 addTarget:self action:oldAction2 forControlEvents:UIControlEventTouchUpInside];

[button2 removeTarget:self action:oldAction2 forControlEvents:UIControlEventTouchUpInside];
[button2 addTarget:self action:oldAction1 forControlEvents:UIControlEventTouchUpInside];

重複したコードを回避する方法はいくつかありますが、この方法の方がはるかに読みやすいと感じました。最後に、このソリューションは、コンパイル時に特定のアクションを割り当てることに依存するのではなく、実行時の状況に基づいてアクションを真に交換します。これにより、更新された要件を満たす必要があります。お役に立てれば!

于 2012-10-09T15:37:03.533 に答える
0

button1とbutton2の両方に同じセレクターを設定して、送信者オブジェクトとbutton1、button2を比較することもできます。

    -(void)sameSelectorForButton1andButton2:(id)sender
     {        
if ((UIButton*)sender == button1) 
     {     //do something          }
else if((UIButton*)sender == button2) 
     {      //do something   }   
   }
于 2012-10-09T17:09:20.210 に答える