3

インターフェイスで 10 個のボタンを使用しており、時々ボタンのセレクターを変更する必要があります。

私は使用する必要がありますか:

-(void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

セレクターを変更する前に、または単に使用できます:

-(void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

addTarget: メソッド sans を使用してセレクターを変更すると、removeTarget: メソッドが押されたときに UIButton が起動するセレクターを本質的に「スタック」するのではないかと心配しています。

4

2 に答える 2

12

はい、新しいターゲットをボタンに割り当てる前に、以前に追加したターゲットを常に削除する必要があります。このような - -

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn setFrame:CGRectMake(50, 50, 200, 50)];

    [btn setTag:101];
    [btn addTarget:self action:@selector(method1) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];


    btn = (UIButton *)[self.view viewWithTag:101];
    [btn removeTarget:self action:@selector(method1) forControlEvents:UIControlEventTouchUpInside];
    [btn addTarget:self action:@selector(method2) forControlEvents:UIControlEventTouchUpInside];

今これをしたら

btn = (UIButton *)[self.view viewWithTag:101];
        [btn addTarget:self action:@selector(method2) forControlEvents:UIControlEventTouchUpInside];

次に、メソッド method1 と method2 の両方が呼び出されます。

お役に立てれば。

于 2009-12-30T07:17:46.800 に答える
2

はい、古いターゲット/アクションを削除する必要があります。そうしないと、古いアクションと新しいアクションの両方が実行されます。

于 2009-12-30T07:13:30.567 に答える