質問: Cocoa Touchの代議員対イベント 私は最初のiPhoneアプリを書いています.Cocoa TouchとObjective-Cでデザインパターンを探求しています。私はクライアントサイドのWeb開発の背景から来ているので、私は代議員の周りに私の頭を包み込むことを試みています。 具体的には、イベントハンドラの代わりにデリゲートオブジェクトが必要な理由はわかりません。例えば、ユーザーがボタンを押すと、それはイベント( `UITouchUpInside` )で処理されますが、ユーザーがテキストボックスへの入力を終了し、「完了」ボタンを使用して閉じると、アクションはテキストボックスのデリゲート( `textFieldShouldReturn` )でメソッドを呼び出すことによって処理されます。 なぜイベントの代わりにデリゲートメソッドを使用するのですか?私はまた、 `viewDidLoad` メソッドを持つビューコントローラでこれに気付きました。なぜイベントを使用しないのですか?
回答: イベントとデリゲートには2つの目的がありますので、どちらも使用されています。 あなたのボタンを押してメッセージを鳴らしたいだけなら、イベントはいいです。フォーカスを失う前に**完了**ボタンを押してテキストフィールドのコンテキストを検証したい場合は、 `textFieldShouldReturn` デリゲートメソッドを使用して検証と戻りを処理できます検証しない場合は、いいえ。 代理人は実際にサブクラス化せずに動作を変更することができます。この目的のためには**すべき**と**した**メソッドがあります。これらのメソッドは、アクションの前および/または後に検証、通知、または処理するときに、アクションメソッドをオーバーライドする代わりに実装します。 UIKitオブジェクトをサブクラス化する必要があると思われる場合は、まずその委譲メソッドを確認してください。すでにカスタムビヘイビアを配置する場所があります。