UIButtonはすべてのターゲットアクションを削除します


341

UIButtonに複数のtarget-action-forControlEvents:を追加しました。何も割り当てを解除せずに、これらすべてを一度に削除したいのですが。その後、新しい目標を設定します。

これは可能ですか、どうすればいいですか?

回答:


824

removeTarget:action:forControlEvents:を呼び出し、ターゲットにnil、アクションにNULLを渡し、すべてのビットを設定するコントロールマスク(UIControlEventAllEvents)を使用します。

Objective-C

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

スウィフト2

button.removeTarget(nil, action: nil, forControlEvents: .AllEvents)

スウィフト3

button.removeTarget(nil, action: nil, for: .allEvents)

4
先端をありがとう!ここに私が思う完全なリンクがあります(つまり、セクションに): " developer.apple.com/iphone/library/documentation/uikit/…:"
SK9

1
もちろん、progrmrの提案は機能します。ここで答えに追加するのが、私が必要としたようなコードスニペットです:[button removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];
SK9

6
補足:-allTargetsインスタンスメソッドは、すべてのインスタンスのターゲットのNSSetを返します(存在しない場合はnil)。
SK9 2010

3
パーフェクト!まさに私が探していたもの:D
Totumus Maximus

1
Swift 2と3で更新されました。言語のみが異なり、まったく同じ答えを持つ競合する答えがあるためです。
Peter DeWeese

92

Swift 2での@progrmrの回答:

button.removeTarget(nil, action: nil, forControlEvents: .AllEvents)

とスウィフト3:

button.removeTarget(nil, action: nil, for: .allEvents)

注:SwiftにはがないためNULL、Swift nilとの置き換えをテストしたところ、問題なく動作するようです。


5
Swift 3の場合: ".AllEvents"は ".allEvents"になりました(小文字の 'a'付き):removeTarget(nil, action: nil, for: .allEvents)
Sasho

ご注意について:実は、私はあなたがどちらか渡すことができると考えているnilNULL両方すぎObjective-Cの第1、第2引数は、それが動作します。私は両方ともとして定義されていると信じています(void*) 0(少なくとも、等しいと評価します)。
Nicolas Miari 2016年

@Sasho Swift 3にアップグレードすると、ソースファイルのサイズが(平均で)どれだけ減少するかに関する統計が見られます(新しいメソッド/引数の命名規則により)。
Nicolas Miari 2016年

これは別の言語での同じ回答であり、言語はこの質問でタグ付けされていないため、@ progrmrの回答を編集する必要があります。
Peter DeWeese

6

迅速:

btnCancel.removeTarget(self, action: Selector(), forControlEvents: UIControlEvents.AllEvents)

カバーする言語を指定してください
Juan Boero

@JuanPabloBoero、それは迅速です
Iya

3

スウィフト2:

actionButton.removeTarget(nil, action: nil, forControlEvents: .AllEvents)

Swift 3&4:

actionButton.removeTarget(nil, action: nil, for: .allEvents)

Objective-C:

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

それが役に立てば幸い。


2
- removeTarget:action:forControlEvents:

このメソッドは、指定されたターゲットオブジェクトへのイベントの配信を停止します。

  1. このメソッドは、targetパラメータで有効なオブジェクトを指定すると、そのオブジェクトに関連付けられているすべてのアクションメソッドへの指定されたイベントの配信を停止します。

  2. ターゲットパラメーターにnilを指定すると、このメソッドは、これらのイベントがすべてのターゲットオブジェクトのすべてのアクションメソッドに配信されないようにします。

    目標-c:

    [_myButton removeTarget:  //any validObject (or) nil
                  action:nil
        forControlEvents:UIControlEventAllEvents]; 

    迅速:

    myButton.removeTarget(*validObject or nil*, action:nil, forControlEvents:UIControlEvents.AllEvents)

詳細については、https//developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTargetactionforControlEventsをご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.