2016-06-23 9 views
0

私の兄と私は、Appleが開発したiOS Apps(Swift)チュートリアルの開発を開始することでSwiftのiOSアプリを作り始めています。チュートリアルの初めに、デリゲートを使用して、ボタンのテキストをテキストフィールドのテキストに変更できるようにしました。デリゲートを使用してクラスがデータアクセスを行う必要がある理由はわかりません。私たちは多くの研究を行いました。デリゲートが使用される唯一の理由は、以前のView Controllerにデータを戻す必要があるということだけです。単一のビューコントローラでデリゲートを使用する必要があるのはなぜですか?ありがとうございました。1つのビューコントローラでデリゲートを使用する必要があるのはなぜですか?

答えて

1

代理人は、オブジェクトがプログラム内のイベントに遭遇したときに、別のオブジェクトの代わりに、または連携して動作するオブジェクトです。委任オブジェクトは、レスポンダオブジェクト(UIKitのAppKitまたはUIResponderのNSResponderを継承するオブジェクト)であり、ユーザイベントに応答します。デリゲートは、そのイベントのユーザーインターフェイスのコントロールを委任されたオブジェクト、または少なくともアプリケーション固有の方法でイベントを解釈するよう要求されたオブジェクトです。

委任方法は、従来の形式を持っています。それらは、アプリケーション、ウィンドウ、コントロールなどの委任を行っているAppKitオブジェクトまたはUIKitオブジェクトの名前から始まります。この名前は小文字で、 "NS"または "UI"プレフィックスはありません。通常、(常にではないが)このオブジェクト名の後には、報告されたイベントの一時的な状態を示す補助動詞が続きます。この動詞は、言い換えれば、イベントが起こっているかどうか(「しなければならない」かどうか)、またはそのイベントが発生したかどうかを示します。この一時的な区別は、戻り値を期待するメッセージとそうでないメッセージを分類するのに役立ちます。


あなたが作成することができ委任/フレームワーククラスのプロトコルからのフレームワーク利用できる代表者を区別する必要があります。

は、Frameworkクラスのデリゲート フレームワーククラスまたは委任を宣言し実装する任意の他のクラスになるにデリゲートプロパティとプロトコル(通常は正式なプロトコル)。このプロトコルは、デリゲートが実装する必須およびオプションのメソッドをリストします。あなたのクラスのインスタンスは、フレームワークオブジェクトのデリゲートとして機能するためには、以下を行う必要があります。

  • は(デリゲート プロパティに割り当てることによって)デリゲートとして、あなたのオブジェクトを設定します。プログラムによって、またはInterface Builderを介してこれを行うことができます。
  • プロトコルが正式な場合は、クラス定義で プロトコルを採用することを宣言します。

例:あなたはいくつかの例を見つけることができます。このSO threadでも

class myClass: NSObject,myCustomDelegate { 
    ... 
} 

..

  • プロトコルのすべての必要なメソッドと、あなたが参加したい任意のオプション メソッドを実装。

Apple公式Source

+0

デリゲートが何であるか理解していますが、なぜ1つのビューコントローラに1つのビューアーが必要なのか分かりません。 View Controllerが前の情報を知らないため、View Controllerが前の情報に情報を戻しているときに意味があります。しかし、単一のビューコントローラでは、すべてのオブジェクトが互いに情報を持っています。なぜオブジェクトクラスは自分自身でそれを行うことはできませんか?なぜ彼らはすべてを行うために代議員が必要ですか?ありがとうございました。 –

+0

私の答えの最初の部分で説明したように、あなたはあなたのオブジェクトに関する多くのことを知るためのインタフェースメソッドとして "フレームワークの代理人"を見ることができます:UITextFieldは、ユーザーがいつ返りボタンをタップしたのかを彼に知らせる代行メソッドを持っています。キーボード(textFieldShouldReturn)ので、myTextField.delegate = self(自分のものを持っている私の実際のクラス)です。 delegate = selfを設定するのはなぜですか?私は、myTextFieldの周りに起こったイベントを知りたいので) –

+0

代理人を使用すると、代理人を使用せずに利用できない別のクラスに関する情報がクラスに与えられます。 –

0

あなたはおそらくストーリーボードを使用しており、UIButtons/UITextFieldsなどのすべてのUIViewコンポーネントはアウトレットであり、UIViewControllerで直接アクセスできます。

委任:

委任である1つの接続関係に、ビルドビューのための複雑なレイアウトを必要とする状況を想像し、あなたはのUIViewのサブクラスを作成し、ドロー/そこにあなたのコンポーネントを配置しますあなたのUIViewControllerのサブウィークにこのビューを追加するよりも、ビュー内のイベントをリッスンする必要がある場合(ボタンクリック、ScrollViewオフセットの変更など)、それらのイベントをリッスンするプロトコルを作成し、UIViewControllerに伝える必要がありますそのプロトコルの魔女があなたの複雑なUIViewに実装されているMVCのためにあなたのコントローラは、ビューを変更する必要があり、あなたはそのデリゲートを介してコントローラにデータやイベントを渡す必要があります。

私は先生ではないので、私はあなたの意見を理解してくれることを願っています。

関連する問題