1

これを明確にすることができれば幸いです。ボタンがあり、どのオブジェクトのどの関数が .touchDown イベントのターゲットであるかを知りたいです。私が探しているものと思われる iOS のプロパティと関数がありますが、それらを機能させることはできません。プロパティ: self.allTargets 関数: self.actions(forTarget:, forControlEvent:)

このコードで値を出力しました:

print( self.allTargets )
print( self.actions(forTarget: self, forControlEvent: .touchDown) ?? "no targets")
print( self.actions(forTarget: Button_Test.ViewController , forControlEvent: .touchDown) ?? "no targets")
print( self.actions(forTarget: "ViewController", forControlEvent: .touchDown) ?? "no targets")

結果:

[AnyHashable(<Button_Test.ViewController: 0x7b293300>)]
no targets
no targets
no targets

ボタンにターゲットがあることはわかりますが、機能を取得できません。ヘルプ!

4

3 に答える 3

1

特定のコントロール イベント (この場合) のすべてのtarget/actionペアを取得.touchDownするには、次の手順を実行する必要があります。

let targets = self.allTargets
for target in targets {
    if let actions = self.actions(forTarget: target, forControlEvent: .touchDown) {
        for action in actions {
            print("taget: \(target) - \(action)")
        }
    }
}

基本的に、すべてのターゲットを繰り返し処理し、特定のイベントの各ターゲットのアクションのリストを取得する必要があります。

于 2016-12-04T18:41:06.667 に答える
0

ターゲットAnyHashable(<Button_Test.ViewController: 0x7b293300>)は 1 つ以上のコントロール イベントのアクションを実行するように登録されているようですが、self==Button_Test.ViewControllerメモリ アドレス0x7b293300であると仮定すると、特定のコントロール イベントに登録されていません。.touchDown

UIButtonアクションをトリガーする の最も一般的な制御イベントは です.touchUpInside。そのイベントを指定しようとしましたか。例えば:

print( self.actions(forTarget: self, forControlEvent: .touchUpInside))

もう 1 つの可能性は、それselfが登録されたターゲットではないことです。次の行を追加すると、コンソールに何が表示されますか:

print(self)

タイプはself Button_Test.ViewControllerで、アドレスは0x7b293300ですか?

注意として、3 番目と 4 番目のprint()ステートメントは、ボタンに存在する実際のターゲットと一致しないターゲットを渡すため、有効な結果を返すことはありません (ある場合はtype Button_Test.ViewControllerのみ、別の場合は string "ViewController") 。 .

于 2016-12-04T18:27:51.863 に答える