Start Developing iOS Apps Today(5)~インタラクションの定義

2014. 02. 17
●インタラクションの定義

ユーザインターフェイスをレイアウトした後、ユーザがそれらと対話できるようにする必要があります。
これはコントローラの出番です。
コントローラはユーザのアクションへの応答と、コンテンツをビューに挿入することによりビューをサポートします。
コントローラオブジェクトは、ビューがデータモデルの変化について、またはその逆を感知するための仲介役です。
ビューはアプリのコントローラを介してモデルデータの変更を通知し、コントローラはモデルオブジェクトに(テキストフィールドでのテキスト入力など)ユーザが始めた変更を通達します。
それらがユーザのアクションに応答するか、あるいはナビゲーションを定義しているかどうかといったアプリの動作をコントローラが実装します。

ModelViewController_c_2x.png



●ビューコントローラ

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

view_layer_objects_2x_201401311159176df.png

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

ビューコントローラは多くの役割を果たします。
コンテンツビューのライフサイクルの管理や、デバイスが回転した時に向きを変更する処理、アプリのデータモデルとデータを表示するビュー間の情報の流れを調整します。
しかし、おそらく最も明白な役割はユーザ入力への応答です。

またビューコントローラは、ある種のコンテンツから別のコンテンツへの遷移を実装するために使用します。
iOSアプリのコンテンツを表示する領域は僅かな量なので、ビューコントローラはあるビューコントローラからビューを削除して別のビューに置換するために必要な基盤を提供しています。

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



●アクション

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

IBAction戻り値型とsenderパラメータを持つメソッドを作成および実装することによってアクションを定義します。

- (IBAction)restoreDefaults:(id)sender;

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



●アウトレット

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

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

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

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



●コントロール

コントロールはユーザがコンテンツとの相互作用を操作するボタンやスライダ、またはスイッチなどのユーザインターフェイスオブジェクトで、入力の提供やアプリ内のナビゲート、貴方の定義した他のアクションの実行などを行います。
コントロールは、コードがユーザインターフェイスからのメッセージを受信するための方法を提供します。

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

イベントの種類には3つの一般的なカテゴリがあります。

  • タッチとドラッグイベント。
    タッチとドラッグイベントは、ユーザがタッチまたはドラッグでのコントロールを操作した時に発生します。
    タッチイベントには、いくつかの利用可能な段階があります。
    ユーザが最初にボタン上に指をタッチした時、Touch Down Insideイベントがトリガされますが、ユーザがボタンの外にドラッグするとそれぞれのドラッグイベントがトリガされます。
    Touch Up Insideは、ボタンの縁の境界内に留まったままボタンから指を離した時に送信されます。
    ユーザが指を離す前にボタンの外に指をドラッグした場合、実際にはタッチが無効となり、Touch Up Outsideイベントがトリガされます。

  • 編集イベント。
    ユーザがテキストフィールドを編集した時、編集イベントが発生します。

  • 値変更イベント。
    値変更イベントは、ユーザが一連の異なる値を発生させるためにコントロールを操作した時に発生します。

インタラクションを定義する際、アプリ内の全てのコントロールに関連付けられているアクションを知ることで、インターフェイスのユーザに対するコントロールの目的が明白になります。



●ナビゲーションコントローラ

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

特定のナビゲーションコントローラによって管理されたビューコントローラのセットは、ナビゲーションスタックと呼ばれます。
ナビゲーションスタックはラストイン・ファーストアウトの、カスタムのビューコントローラオブジェクトのコレクションです。
スタックに追加された最初の項目がルートビューコントローラとなり、スタックからポップオフすることはありません。
他のビューコントローラは、ナビゲーションスタックにプッシュしたりポップオフすることができます。

ナビゲーションコントローラの主な仕事は、コンテンツビューコントローラの表示を管理することですが、自身のカスタムビューを表示する責任もあります。
具体的には、backボタンとカスタマイズ可能な他のボタンを含むナビゲーションバー(ナビゲーション階層におけるユーザの位置について、コンテキストを提供する画面上部にあるビュー)の表示です。

一般的に貴方がナビゲーションスタックからビューコントローラをポップオフする全ての作業を行う必要は無く、ナビゲーションコントローラによって提供されるbackボタンが処理します。
ただし、スタックへのビューコントローラのプッシュは手動で行う必要があります。
これらはストーリーボードを使用して行うことができます。



●ナビゲーションを定義するためにストーリーボードを使用

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

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

segue_2x.png

作成できるセグエにはいくつかの種類があります。

  • プッシュ。
    プッシュセグエはナビゲーションスタックに目的先のビューコントローラを追加します。
    プッシュセグエは、ソースビューコントローラがナビゲーションコントローラに接続されている時のみ使用することができます。

  • モーダル。
    モーダルセグエは、単にあるビューコントローラが別のコントローラにモーダルに表示するもので、アプリのメインフローに戻る前に、提示されたコントローラでいくつかの動作を実行するようにユーザに要求します。
    モーダルビューコントローラはナビゲーションスタックに追加されず、代わりに一般的には提示しているビューコントローラの子と見なされます。
    提示しているビューコントローラは、
    責任がある 却下する モーダルビューコントローラの作成と提示を却下する責任があります。

  • カスタム。
    UIStoryboardSegueをサブクラス化することによって、独自のカスタム遷移を定義することができます。

  • アンワインド。
    アンワインドセグエは、ビューコントローラの既存のインスタンスにユーザを戻すために、1つ以上のセグエを介して遡って移動します。
    逆方向のナビゲーションを実装するには、アンワインドセグエを使用します。

セグエの代わりにリレーションシップによってシーンを接続することもできます。
例えば、ナビゲーションコントローラとそのルートビューコントローラ間のリレーションシップがあります。
この場合、リレーションシップはナビゲーションコントローラによってルートビューコントローラの抑制を表します。

アプリのユーザインターフェイスの構想にストーリーボードを使用する際、ビューコントローラの1つが初期ビューコントローラとして印されていることを確認することが重要です。
実行時には、このビューコントローラがアプリの起動時に最初に表示されるコンテンツビューとなり、必要に応じて他のビューコントローラのコンテンツビューに遷移します。

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



参考文献

Apple/Start Developing iOS Apps Today

0 CommentsPosted in 資料





Bose QuietComfort 20
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
08 | 2017/09 | 10
Sun Mon Tue Wed Thu Fri Sat
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Bose QuietComfort 20
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR