0

アップルがUIButtonのイベント処理にターゲットアクションデザインパターンを使用することを決定する理由を理解できますか?なぜUIButtonがターゲットアクションデザインパターンを使用するのですか?UITextFieldの代行パターンと副Versesではなく

また、アップルがなぜUITextFieldの委任デザインパターンを選択するのかは、ターゲットアクションでも同じことが達成できます。

+0

https://stackoverflow.com/questions/41141828/why-uibutton-uses-target-action-design-pattern-not-delegate-pattern-and-vice-ver – Arpit

答えて

2

さまざまなアプローチにはさまざまなトレードオフがあります。しかし、私はボタンアクションのクリンチャーは、ボタンに複数のターゲット/アクションを追加できるということです。 (1対多の関係)委譲は1対1の関係であるため、ボタンを複数のアクション、場合によっては異なるターゲットにトリガーさせることは、委譲の設計パターンでは不可能です。

アップルがIBActionsの代わりにブロック/クロージャを使用するとボタン処理が設計されていたと思います。コントロールは、ブロックの配列とそれぞれをトリガするイベントを保持できます。

1

すべて@IBAction関数は3つのシグネチャのうちの1つを持ちます。 functionName(sender: Any) -> Void

  • functionName() -> Void
    • functionName(sender: Any, forEvent event: UIEvent) -> Void

    アンIBActionは、他の引数を受け入れることができない、値を返しません。

    代理人は、異なるパラメータと戻り値を持つ関数を使用できますが、アクションはサブクラスUIViewの標準的なアプローチです。

    UITextFieldのようないくつかのクラスでは、特定のアクションはデリゲートメソッドとアクションメソッドの両方で処理できます。私はちょうどあなたにいくつかの選択肢を与えると思います。既にデリゲート関数を実装している場合は、アクションハンドラも実装する必要はありません。

  • +0

    実際には、** THREE ** IBActionのための有効な機能シグネチャ:パラメータなし、送信側、または送信側およびトリガする「UIEvent」。 @IBAction func doSomething(送信者:UIButton、forEventイベント:UIEvent) ')このリンクのリスト1を参照してください:https(@IBAction func doSomething()、 )@IBAction func doSomething(送信者:UIButton)'と ://developer.apple.com/reference/uikit/uicontrol –

    +0

    ありがとうございます。私は自分の答えを編集しました。面白いことにAppleのマニュアルは間違っています。送信者はUIButtonではない可能性があります。 – Paulw11

    +0

    送信者は確かに 'UIButton 'である可能性があります。私はいつもそうする。 'UIControl'クラスはUIButtonの親クラスですので、UIButton *は' UIControl'です。 –

    0

    これは、Appleがコードでさまざまなパターンを表示したいためです。

    関連する問題