インタラクションを定義する


iOS アプリは、イベント駆動型プログラミング に基づいています。すなわち、システムイベントとユーザのアクション:アプリの流れは、これらのイベントによって決定されます。ユーザーがアプリでイベントを引き起こすと、インターフェイス上でアクションを実行します。これらのイベントは、アプリのロジックとそのデータの操作の実行となります。ユーザーのアクションへのアプリの応答がインターフェイスに反映されます。開発者ではなくユーザーは、アプリのコードの特定の部分が実行されるときの制御下にあるので、あなたは正確にどのアクションをユーザーが実行することができ、それらのアクションに反応して何が起こるを識別できます。


ビューコントローラ内にイベント処理ロジックの多くを定義します。コントローラ は、ユーザのアクションに応答してビューのサポートをするオブジェクトであり、コンテンツで占められるビューです。コントローラ・オブジェクトは、ビューが、データ・モデルとの対話を通じる導管です。ビューはアプリのコントローラを介して、モデルデータの変更が通知され、コントローラは、ユーザによる変更-例えば、テキストフィールドに入力されたテキスト-をオブジェクト・モデルに通信します。それらはユーザーのアクションに応答するか、ナビゲーションを定義しているか、コントローラが、アプリの動作を実装しているかに反応します。


ModelViewController_c_2x



ビューコントローラ


基本的なビュー階層を構築した後の、次のステップは、視覚的な要素を制御し、ユーザー入力に応答することです。 iOS アプリでは、サブビューのその階層とコンテンツビューを管理するために、ビューコントローラUIViewController)を使用します。


view_layer_objects_2x



ビューコントローラはビュー階層の一部ではなく、またあなたのインターフェイス内の要素でもありません。代わりに、階層内のビューオブジェクトを管理し、動作でそれらを提供します。ストーリーボードにビルドする各コンテンツビュー階層は、インタフェース要素を管理し、ユーザーとの対話に応じてタスクを実行するための責任があるビューコントローラを必要とします。これは通常、各コンテンツ·ビュー階層のカスタムの UIViewController サブクラスを書くことを意味します。アプリが複数のコンテンツビューを持っている場合は、それぞれのコンテンツビューに別のカスタムの View Controller クラスを使用します。


ビューコントローラは、多くの役割を果たしています。これらは、アプリのデータモデルとデータを表示するビューの間の情報の流れを図り、コンテンツビューの寿命を管理し、デバイスが回転したときに向きが変化することを扱います。しかし、おそらくその最も明白な役割は、ユーザー入力に応答することです。


また、一つのコンテンツの型から別の型への移行を実現するために、ビューコントローラーを使用します。iOS アプリのコンテンツを表示するスペースは限られているので、ビューコントローラは、1つのビューコントローラからビューを削除し、別のビューに置き換えるために必要なインフラストラクチャを提供します。


アプリ内の相互作用を定義するには、ビューコントローラのファイルとストーリーボードのビューが通信するようにします。アクションとアウトレットを通じてストーリーボードとソースコードファイル間の接続を定義することによってこれを行います。


アクション


アクションは、アプリで発生する可能性のある、イベントにリンクされたコードの一部です。そのイベントが発生すると、コードが実行されます。ユーザーインターフェイスを更新するデータの一部を操作する事で何かを達成するためのアクションを定義できます。ユーザーまたはシステムイベントに応答して、アプリの流れを動かすためのアクションを使用します。


IBAction の戻り値の型と sender パラメータを持つメソッドを作成し、実装することで、アクションを定義します。


- (IBAction)restoreDefaults:(id)sender;



sender パラメータは、アクションを引き起こす責任があるオブジェクトへのポインタです。 IBAction の戻り値の型は、特別なキーワードであり、それは、void キーワードのようなものですが、このメソッドを使用すると、Interface Builder の (このキーワードに IB の接頭辞が付いている理由です) ストーリーボードから接続可能なアクションであることを示しています。ストーリーボードでの要素にアクション IBAction をリンクする方法についての詳細を、チュートリアル:ストーリーボード で学びます。


アウトレット


アウトレット は、ソースコードファイルからストーリーボードへとオブジェクトを追加し、インターフェイスからオブジェクトを参照する方法を提供します。ビュー·コントローラ·ファイルにストーリーボード内に特定のオブジェクトから Control- ドラッグでアウトレットを作成します。これは、実行時にコードから、そのオブジェクトにアクセスして操作することができるように、ビューコントローラ・ファイル内にオブジェクトのプロパティを作成します。例えば、第二のチュートリアルでは、コード内のテキストフィールドの内容にアクセスできるように、ToDoList アプリでテキストフィールドのためのアウトレットを作成します。


アウトレットは、 IBOutlet プロパティとして定義されます。


@property (weak, nonatomic) IBOutlet UITextField *textField;


IBOutlet キーワードを使用すると、Interface Builder からこのプロパティに接続できると Xcode に伝えます。 チュートリアル:ストリーボード で、ストーリーボードからソースコードにアウトレットを接続する方法の詳細を学びます。


コントロール


コントロール は、ボタン、スライダー、またはスイッチのようなユーザー・インターフェース・オブジェクトであり、ユーザーはコンテンツを操作したり、入力を提供したり、アプリ内で移動して、あなたが定義したように他のアクションを実行します。コントロールは、コードがユーザー·インターフェースからのメッセージを受信する方法を提供します。


ユーザーがコントロールを操作すると、コントロール・イベントが作成されます。コントロール・イベント は、コントロールから指を持ち上げたり、コントロール上で指をドラッグしたり、テキストフィールド内でタッチダウンしたりなどの、ユーザーがコントロール上で作り上げられる様々な物理ジェスチャーを表します。


コントロール/・イベントには一般的なカテゴリが三つあります。


相互作用を定義するように、あなたのアプリ内のすべてのコントロールに関連付けられるアクションを知り、インターフェイス内のユーザーにそのコントロールの目的が明確になるようにします。



アプリが複数のコンテンツビューの階層を持っている場合は、それらの間で移行できるようにする必要があります。このためには、ビューコントローラの特殊なタイプを使用します:ナビゲーションコントローラ (UINavigationController) です。ナビゲーション・コントローラ は、一連のビューコントローラーを通して、前後の遷移を管理し、ユーザーが iOS の Mail アプリ内の電子メールアカウント、受信メッセージ、および個々の電子メールを移動するときなどを管理します。


特定のナビゲーション・コントローラが管理する一連のビューコントローラは、ナビゲーション・スタックと呼ばれます。ナビゲーション・スタック は、カスタム・ビュー・コントローラー・オブジェクトの、最後に入れた物が最初に出て来る仕組みです。スタックに追加された最初の項目は、ルート・ビュー・コントローラー となり、スタックからはじき出されることはありません。他のビュー・コントローラーは、ナビゲーション・スタックに積み上げたり、はじき出されたりします。


ナビゲーション・コントローラの第一の仕事は、コンテンツ・ビュー・コントローラの表示を管理することですが、それはまた、独自のカスタム・ビューを提示するための責任があります。具体的には、ナビゲーション階層、つまり[戻る]ボタンと、カスタマイズ可能なボタンが含まれる階層の中で、ユーザーの場所に関するコンテキストを提供し、画面最上部のナビゲーション·バーを提示します。ナビゲーション・スタックに追加されているすべてのビューコントローラーは、このナビゲーションバーを提示します。あなたは、ナビゲーションバーを設定する責任があります。


あなたは一般的には、ナビゲーション・スタックからビューコントローラーをはじき出す作業を行う必要はありません。ナビゲーション・コントローラが提供する[戻る]ボタンが、これを処理します。ただし、スタックにビュー・コントローラを積み上げるのは手動でしなければなりません。ストーリーボードを使ってこれを行うことができます。


ナビゲーションの定義にストーリーボード


これまでのところ、ストーリーボードを使って、アプリ内のコンテンツを一つの画面として作成する方法について学びました。さて、あなたのアプリ内の複数のシーン間のフローを定義するためにそれらを使用する方法について学習します。


最初のチュートリアルでは、作業していたストーリーボードは、一つのシーンしか持っていませんでした。ほとんどのアプリでは、ストーリーボードは、それぞれがビューコントローラとそのビュー階層を表す、いくつものシーンの並びから構成されています。シーンは2つのビュー・コントローラ (ソースとデスティネーション) 間の遷移を表す セグエ によって接続されています。


segue_callout_2x


ストーリーボードで作成できるセグエにはいくつかの種類があります。



セグエに加えて、シーンも 関係 によって接続できます。例えば、ナビゲーション・コントローラとそのルート・ビュー・コントローラの間の関係があります。この場合、その関係は、ナビゲーション・コントローラによるルート・ビュー・コントローラの封じ込めを表しています。


これで、ストーリーボードでビューとビュー·コントローラの作業の基礎を学んだので、次のチュートリアルで ToDoList アプリにこの知識を取り入れる時が来ました。






前の章:ユーザーインターフェースデザイン

次の章:チュートリアル:ストーリーボード
目次
Xcode の新機能