私の兄と私は、Appleが開発したiOS Apps(Swift)チュートリアルの開発を開始することでSwiftのiOSアプリを作り始めています。チュートリアルの初めに、デリゲートを使用して、ボタンのテキストをテキストフィールドのテキストに変更できるようにしました。デリゲートを使用してクラスがデータアクセスを行う必要がある理由はわかりません。私たちは多くの研究を行いました。デリゲートが使用される唯一の理由は、以前のView Controllerにデータを戻す必要があるということだけです。単一のビューコントローラでデリゲートを使用する必要があるのはなぜですか?ありがとうございました。1つのビューコントローラでデリゲートを使用する必要があるのはなぜですか?
答えて
代理人は、オブジェクトがプログラム内のイベントに遭遇したときに、別のオブジェクトの代わりに、または連携して動作するオブジェクトです。委任オブジェクトは、レスポンダオブジェクト(UIKitのAppKitまたはUIResponderのNSResponderを継承するオブジェクト)であり、ユーザイベントに応答します。デリゲートは、そのイベントのユーザーインターフェイスのコントロールを委任されたオブジェクト、または少なくともアプリケーション固有の方法でイベントを解釈するよう要求されたオブジェクトです。
委任方法は、従来の形式を持っています。それらは、アプリケーション、ウィンドウ、コントロールなどの委任を行っているAppKitオブジェクトまたはUIKitオブジェクトの名前から始まります。この名前は小文字で、 "NS"または "UI"プレフィックスはありません。通常、(常にではないが)このオブジェクト名の後には、報告されたイベントの一時的な状態を示す補助動詞が続きます。この動詞は、言い換えれば、イベントが起こっているかどうか(「しなければならない」かどうか)、またはそのイベントが発生したかどうかを示します。この一時的な区別は、戻り値を期待するメッセージとそうでないメッセージを分類するのに役立ちます。
あなたが作成することができ委任/フレームワーククラスのプロトコルからのフレームワーク利用できる代表者を区別する必要があります。
は、Frameworkクラスのデリゲート フレームワーククラスまたは委任を宣言し実装する任意の他のクラスになるにデリゲートプロパティとプロトコル(通常は正式なプロトコル)。このプロトコルは、デリゲートが実装する必須およびオプションのメソッドをリストします。あなたのクラスのインスタンスは、フレームワークオブジェクトのデリゲートとして機能するためには、以下を行う必要があります。
- は(デリゲート プロパティに割り当てることによって)デリゲートとして、あなたのオブジェクトを設定します。プログラムによって、またはInterface Builderを介してこれを行うことができます。
- プロトコルが正式な場合は、クラス定義で プロトコルを採用することを宣言します。
例:あなたはいくつかの例を見つけることができます。このSO threadでも
class myClass: NSObject,myCustomDelegate {
...
}
..
- プロトコルのすべての必要なメソッドと、あなたが参加したい任意のオプション メソッドを実装。
Apple公式Source
あなたはおそらくストーリーボードを使用しており、UIButtons/UITextFieldsなどのすべてのUIViewコンポーネントはアウトレットであり、UIViewControllerで直接アクセスできます。
委任:
委任である1つの接続関係に、ビルドビューのための複雑なレイアウトを必要とする状況を想像し、あなたはのUIViewのサブクラスを作成し、ドロー/そこにあなたのコンポーネントを配置しますあなたのUIViewControllerのサブウィークにこのビューを追加するよりも、ビュー内のイベントをリッスンする必要がある場合(ボタンクリック、ScrollViewオフセットの変更など)、それらのイベントをリッスンするプロトコルを作成し、UIViewControllerに伝える必要がありますそのプロトコルの魔女があなたの複雑なUIViewに実装されているMVCのためにあなたのコントローラは、ビューを変更する必要があり、あなたはそのデリゲートを介してコントローラにデータやイベントを渡す必要があります。
私は先生ではないので、私はあなたの意見を理解してくれることを願っています。
- 1. なぜデータソース/デリゲートを2回宣言する必要があるのですか?
- 2. Cocoaのデリゲートとは何ですか?なぜそれらを使用する必要がありますか?
- 3. $リソースで$ promiseを使用する必要があるのはなぜですか?
- 4. java.util.TimerTaskのpurge()を使用する必要があるのはなぜですか?
- 5. デリゲートに追加された関数が静的である必要があるのはなぜですか?
- 6. なぜ私は異なるプロジェクトに1つだけのソリューションを使用する必要がありますか?
- 7. なぜSpringでアノテーションを使用する必要があるのですか?
- 8. アプリで2つのサービスを使用する必要があるのはなぜですか?
- 9. 1つのウィジェットから複数のウィジェットを更新する必要があるのはなぜですか?
- 10. なぜvalue.lengthを使用する必要がありますか?
- 11. なぜstopPropagation()を使用する必要がありますか?
- 12. なぜ?と?を使用する必要があるのはなぜですか?一緒にならずに
- 13. なぜ私は(...)ループでbrowserifyを使用する必要がありますか?
- 14. WXPythonでクラスを使用する必要があるのはいつですか?
- 15. 子ビューコントローラには共通の親ビューコントローラが必要ですか?
- 16. iPhoneプログラミングでは、異なるビューコントローラで1つのクラスプロパティを使用する
- 17. なぜ使用する必要がありますか?
- 18. キャッスルアクティブレコードでは、セッションスコープを終了する必要があるときにCreateAndFlushを使用する必要があるのはなぜですか?
- 19. 非ルートパッケージでリソースを使用するとRクラスをインポートする必要があるのはなぜですか?
- 20. デリゲートを使用してオブジェクトを解放する必要がありますか?
- 21. なぜソケットをPHPで使用する必要がありますか
- 22. Javaでは、例外クラスが必要になる前にクラスローダーが使用できるようにする必要があるのはなぜですか?
- 23. VMLを使用する際に、次のスタイルを指定する必要があるのはなぜですか?
- 24. Flaskアプリケーション開発でPostgreSQLでSQLAlchemyを使用する必要があるのはなぜですか?
- 25. Admob SDKのサンプルプロジェクトでNavigationControllerを使用する必要があるのはなぜですか?
- 26. 機械学習の問題で正規化を使用する必要があるのはなぜですか?
- 27. このSQLクエリで "as"キーワードを使用する必要があるのはなぜですか?
- 28. このテンプレートでtypedefを使用する必要があるのはなぜですか?
- 29. なぜRoleEnvironment.StatusCheckイベントを購読するのではなく、LoadBalancerProbeを使用する必要がありますか?
- 30. デリゲートのプレフィックスをいつ「静的」にする必要がありますか?
デリゲートが何であるか理解していますが、なぜ1つのビューコントローラに1つのビューアーが必要なのか分かりません。 View Controllerが前の情報を知らないため、View Controllerが前の情報に情報を戻しているときに意味があります。しかし、単一のビューコントローラでは、すべてのオブジェクトが互いに情報を持っています。なぜオブジェクトクラスは自分自身でそれを行うことはできませんか?なぜ彼らはすべてを行うために代議員が必要ですか?ありがとうございました。 –
私の答えの最初の部分で説明したように、あなたはあなたのオブジェクトに関する多くのことを知るためのインタフェースメソッドとして "フレームワークの代理人"を見ることができます:UITextFieldは、ユーザーがいつ返りボタンをタップしたのかを彼に知らせる代行メソッドを持っています。キーボード(textFieldShouldReturn)ので、myTextField.delegate = self(自分のものを持っている私の実際のクラス)です。 delegate = selfを設定するのはなぜですか?私は、myTextFieldの周りに起こったイベントを知りたいので) –
代理人を使用すると、代理人を使用せずに利用できない別のクラスに関する情報がクラスに与えられます。 –