アップルがUIButtonのイベント処理にターゲットアクションデザインパターンを使用することを決定する理由を理解できますか?なぜUIButtonがターゲットアクションデザインパターンを使用するのですか?UITextFieldの代行パターンと副Versesではなく
また、アップルがなぜUITextFieldの委任デザインパターンを選択するのかは、ターゲットアクションでも同じことが達成できます。
アップルがUIButtonのイベント処理にターゲットアクションデザインパターンを使用することを決定する理由を理解できますか?なぜUIButtonがターゲットアクションデザインパターンを使用するのですか?UITextFieldの代行パターンと副Versesではなく
また、アップルがなぜUITextFieldの委任デザインパターンを選択するのかは、ターゲットアクションでも同じことが達成できます。
さまざまなアプローチにはさまざまなトレードオフがあります。しかし、私はボタンアクションのクリンチャーは、ボタンに複数のターゲット/アクションを追加できるということです。 (1対多の関係)委譲は1対1の関係であるため、ボタンを複数のアクション、場合によっては異なるターゲットにトリガーさせることは、委譲の設計パターンでは不可能です。
アップルがIBActionsの代わりにブロック/クロージャを使用するとボタン処理が設計されていたと思います。コントロールは、ブロックの配列とそれぞれをトリガするイベントを保持できます。
すべて@IBAction
関数は3つのシグネチャのうちの1つを持ちます。 functionName(sender: Any) -> Void
functionName() -> Void
functionName(sender: Any, forEvent event: UIEvent) -> Void
アンIBActionは、他の引数を受け入れることができない、値を返しません。
代理人は、異なるパラメータと戻り値を持つ関数を使用できますが、アクションはサブクラスUIView
の標準的なアプローチです。
UITextField
のようないくつかのクラスでは、特定のアクションはデリゲートメソッドとアクションメソッドの両方で処理できます。私はちょうどあなたにいくつかの選択肢を与えると思います。既にデリゲート関数を実装している場合は、アクションハンドラも実装する必要はありません。
実際には、** THREE ** IBActionのための有効な機能シグネチャ:パラメータなし、送信側、または送信側およびトリガする「UIEvent」。 @IBAction func doSomething(送信者:UIButton、forEventイベント:UIEvent) ')このリンクのリスト1を参照してください:https(@IBAction func doSomething()、 )@IBAction func doSomething(送信者:UIButton)'と ://developer.apple.com/reference/uikit/uicontrol –
ありがとうございます。私は自分の答えを編集しました。面白いことにAppleのマニュアルは間違っています。送信者はUIButtonではない可能性があります。 – Paulw11
送信者は確かに 'UIButton 'である可能性があります。私はいつもそうする。 'UIControl'クラスはUIButtonの親クラスですので、UIButton *は' UIControl'です。 –
これは、Appleがコードでさまざまなパターンを表示したいためです。
https://stackoverflow.com/questions/41141828/why-uibutton-uses-target-action-design-pattern-not-delegate-pattern-and-vice-ver – Arpit