UINavigationControllerクラス

2010. 10. 23
●概要

UIViewControllerクラスは、階層構造を持つコンテンツの操作を管理するための専用ビューコントローラを実装しています。

このクラスはサブクラス化を意図していません。

代わりに、コンテンツの階層特性を反映したアプリケーションのユーザインターフェイスそのままの状態のインスタンスを使用します。

このナビゲーションインターフェイスは、データを効果的に表すことが可能であり、またユーザが簡単にコンテンツの操作を行うことができます。

ナビゲーションインターフェイスによる画面の表示は、通常データの階層構造に似ています。

階層の各層ごとに、その層のコンテンツを表示するのに(カスタムビューコントローラによって管理された)適した画面を提供します。

図1に例として、iOS シミュレータでのSettingsアプリケーションによる、ナビゲーションインターフェイスの表示を示します。

最初の画面は、設定を含むアプリケーションのリストをユーザに提供しています。

アプリケーションを選択すると、個々の設定とアプリケーションの設定のグループが表示されます。

グループを選択すると、更なる設定などが表示されます。

ルートビュー以外の全てのビューは、ユーザが階層の下から上の層に戻れるように、ナビゲーションコントローラがbackボタンを提供します。

図1 ナビゲーションインターフェイスの例

978

ナビゲーションコントローラオブジェクトは、ナビゲーションスタックを使用して現在表示されている画面を管理します。

このスタックの一番下にあるのはルートビューコントローラで、スタックの一番上にあるのは現在表示されているビューコントローラです。

実行時にスタックを変更するには、ナビゲーションコントローラオブジェクトメソッドを使用をします。

最も一般的な操作は、pushViewController:animated:メソッドを使用して、スタック上の新しいビューコントローラをプッシュすることです。

スタック上の新しいビューコントローラオブジェクトをプッシュすると、ビューコントローラのビューが表示され、ナビゲーションコントロールは変更を反映するように更新されます。

通常はユーザがアイテムを選択することで、情報階層内の次の層に導くような応答をするように、ビューコントローラをプッシュします。

更に、ナビゲーションスタック上のビューコントローラをプッシュした際には、popViewControllerAnimated:メソッドを使用してポップすることもできます。

自身でビューコントローラをポップすることはできますが、ナビゲーションコントローラはユーザ操作に応答して上層のビューコントローラをポップするbackボタンを(該当する場合は)提供します。

ナビゲーションコントローラオブジェクトは、アクティブなビューコントローラの変更に応じてデリゲートオブジェクトに通知します。

デリゲートオブジェクトは、UINavigationControllerDelegateプロトコルに準拠したアプリケーションによって提供されるカスタムオブジェクトです。

このプロトコルのメソッドを使用することで応答の変更や、タスクのクリーンアップまたは設定の追加を実行することができます。

アプリケーションでの統合的なナビゲーションコントローラについての詳細は、『iOS View Controllerプログラミングガイド』を参照してください。


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

UINavigationControllerクラスはUIViewControllerクラスを継承しているため、ナビゲーションコントローラはビュープロパティを介してアクセス可能な独自のビューを持ちます。

ナビゲーションインターフェイスを配置する時は、生成したビュー階層のルートとしてこのビューを設置する必要があります。

例えば、ナビゲーションインターフェイス自身によって配置がされている場合、このビューでウィンドウのメインのサブビューを作成します。

タブバーインターフェイス内にナビゲーションインターフェイスを設置する場合、対応するタブのルートビューとしてナビゲーションコントローラを設置します。

ナビゲーションコントローラのビューは、オプションのツールバーやカスタムコンテンツを含むビュー、ナビゲーションバーといったいくつかの他のビューを含みます。

図2に、これらのビューをどのように組み合わせるかを、全体的なナビゲーションインターフェイスで示します。

ナビゲーションバーやツールバーのビューのコンテンツが変更されてもビュー自身は変化しません。

ナビゲーションスタックの最上位にある場合のみ、ビューコントローラに応答してカスタムコンテントビューが変更されます。

図2 ナビゲーションコントローラのビュー

979

注:カスタムビューに利用できる空間の合計は(他のナビゲーションビューのサイズに応じて)変更することができ、カスタムビューのautosizingMaskプロパティで幅と高さを柔軟に設定することができます。
ビューを表示する前に、ナビゲーションコントローラは自動的に位置とサイズを利用可能な空間に合わせます。

ナビゲーションコントローラは、ナビゲーションバーやナビゲーションツールバーの表示と構成を管理する責任があります。

これらのビューを直接変更してはいけません。

代わりに、UINavigationControllerクラスのプロパティとメソッドを介して操作する必要があります。

ナビゲーションバーの表示/非表示を行うには、navigationBarHiddenプロパティかsetNavigationBarHidden:animated:メソッドを使用します。

ナビゲーションバーにカスタムアイテムを指定する場合は、『ナビゲーションバーの更新』の項にある表示されているビューコントローラの構成を参照してください。

ナビゲーションツールバーでアイテムを指定する方法についての詳細は『ツールバーの表示』を参照してください。

僅かな例外を除いて、ナビゲーションバーオブジェクトを直接変更してはいけません。

ナビゲーションバーのbarStyletranslucentプロパティは変更できますが、frameboundsalpha値を直接変更してはいけません。

更にナビゲーションコントローラオブジェクトは、ナビゲーションスタック上のビューコントローラに関連付けされたナビゲーションアイテム(UINavigationItemクラスのインスタンス)を使用して、動的にナビゲーションバーのコンテンツを作成します。

ナビゲーションバーのコンテンツを変更する場合は、カスタムビューコントローラのナビゲーションアイテムを構成する必要があります。

ナビゲーションアイテムについての詳細は『UINavigationItemクラス』を参照してください。


ナビゲーションバーの更新

ユーザが最上層のビューコントローラを変更する時、ビューコントローラのプッシュまたはポップや、ナビゲーションスタックのコンテンツを直接変更することによって、ナビゲーションコントローラはナビゲーションバーに応じて更新されます。

具体的には、ナビゲーションコントローラはナビゲーションバーの3つの位置(左、中央、右)のそれぞれに表示されるバーボタンアイテムを更新します。

バーボタンアイテムはUIBarButtonItemクラスのインスタンスです。

必要に応じてカスタムコンテンツのアイテムを生成したり、標準システムアイテムを生成することができます。

バーボタンアイテムの生成についての詳細は『UIBarButtonItemクラス』を参照してください。

ナビゲーションバーの左側のバーボタンアイテムで、ナビゲーションスタック上の以前のビューコントローラに戻ることができます。

ナビゲーションバーの左側を更新するナビゲーションコントローラを以下に示します。

  • 新しい最上層のビューコントローラがカスタムの左バーボタンアイテムを持つ場合、そのアイテムが表示されます。
    カスタムの左バーボタンアイテムを指定するには、ビューコントローラのナビゲーションアイテムのleftBarButtonItemプロパティで設定します。

  • 最上層のビューコントローラがカスタムの左バーボタンアイテムを持たず、以前のビューコントローラのナビゲーションアイテムが有効なナビゲーションアイテムを持っている場合、backBarButtonItemプロパティでナビゲーションバーにアイテムを表示します。

  • どちらのビューコントローラでもカスタムのバーボタンアイテムが指定されていない場合、デフォルトのbackボタンが使用され、以前のビューコントローラ(スタック上の一層下になるビューコントローラ)のtitleプロパティの値がタイトルに設定されます。
    (ナビゲーションスタック上にビューコントローラが一つしかない場合は、backボタンは表示されません)

ナビゲーションバーの中央を更新するナビゲーションコントローラを以下に示します。

  • 新しい最上層のビューコントローラがカスタムのタイトルビューを持つ場合、ナビゲーションバーはデフォルトのタイトルビューの場所にそのビューを表示します。
    カスタムのタイトルビューを指定するには、ビューコントローラのナビゲーションアイテムのtitleViewプロパティで設定します。

  • カスタムのタイトルビューが設定されていない場合、ナビゲーションバーはビューコントローラのデフォルトのタイトルを含むラベルを表示します。
    このラベルの文字列は、通常はビューコントローラ自身のtitleプロパティで取得します。
    ビューコントローラに関連付けされたものと異なるタイトルを表示したい場合は、代わりにビューコントローラのナビゲーションアイテムのtitleプロパティを設定します。

ナビゲーションバーの右側を更新するナビゲーションコントローラを以下に示します。

  • 新しい最上層のビューコントローラがカスタムの右バーボタンアイテムを持つ場合、そのアイテムが表示されます。
    カスタムの右バーボタンアイテムを指定するには、ビューコントローラのナビゲーションアイテムのrightBarButtonItemプロパティで設定します。

  • カスタムの右バーボタンアイテムが設定されていない場合、ナビゲーションバーはバーの右側に何も表示しません。

ナビゲーションコントローラは、最上位のビューコントローラが変更される度にナビゲーションバーを更新します。

したがってこれらの変更は、ビューコントローラがスタック上にプッシュまたはポップされる度に発生します。

プッシュまたはポップ操作をアニメーションする場合は、ナビゲーションバーのコンテンツ内の変更をアニメーションするのと同様にナビゲーションコントローラが行います。


ツールバーの表示

iOS 3.0以降では、ナビゲーションコントローラオブジェクトはナビゲーションインターフェイスの各画面へ、カスタムツールバーを容易に提供できます。

ナビゲーションコントローラオブジェクトは、そのビュー階層内のオプションのツールバーを管理しています。

表示された時、このツールバーはアクティブなビューコントローラのtoolbarItemsプロパティから、アイテムの現在の設定を取得します。

アクティブなビューコントローラが変更された時、ナビゲーションコントローラは新しいビューコントローラに適合するようにツールバーのアイテムを更新し、適切な位置に新しいアイテムをアニメーションします。

ナビゲーションツールバーはデフォルトで非表示になっていますが、ナビゲーションコントローラオブジェクトのsetToolbarHidden:animated:メソッドを呼び出すことによって、ナビゲーションインターフェイスに表示することができます。

全てのビューコントローラがツールバーアイテムをサポートしていない場合、デリゲートオブジェクトは後に続くプッシュやポップ操作中に、このメソッドを呼び出してツールバーの表示/非表示を切り替えることができます。



●タスク

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

– initWithRootViewController:

●ナビゲーションスタック上のアイテムへのアクセス

  topViewController    property
  visibleViewController    property
  viewControllers    property
– setViewControllers:animated:

●スタックアイテムのプッシュとポップ

– pushViewController:animated:
– popViewControllerAnimated:
– popToRootViewControllerAnimated:
– popToViewController:animated:

●ナビゲーションバーの構成

  navigationBar    property
  navigationBarHidden    property
– setNavigationBarHidden:animated:

●デリゲートへのアクセス

  delegate    property

●カスタムツールバーの構成

  toolbar    property
– setToolbarHidden:animated:
  toolbarHidden    property



●プロパティ

topViewController

@property(nonatomic, readonly, retain) UIViewController *topViewController

ナビゲーションスタック(ナビゲーションコントローラの管理する階層)最上位のビューコントローラを指します。


viewControllers

@property(nonatomic, copy) NSArray *viewControllers

ナビゲーションスタック上のビューコントローラの現状(履歴)を示します。

ルートビューコントローラは配列のインデックス0で、配列内のアイテム数をnとした場合、最上位のコントローラのインデックスはn-1、以前のビューコントローラのインデックスはn-2になります。

このプロパティにビューコントローラの新しい配列を割り当てるには、setViewControllers:animated:メソッドをanimatedパラメータをNOに設定して呼び出します。



●インスタンスメソッド

popViewControllerAnimated:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated

ナビゲーションスタックから最上層のビューコントローラをポップして、表示を更新します。

戻り値は、スタックからポップされたビューコントローラです。

このメソッドは、スタックから最上位のビューコントローラを削除し、アクティブなビューコントローラを新たな最上位のビューコントローラにします。

スタックの最上位のビューコントローラがルートビューコントローラの場合、このメソッドは何もしません。

言い換えると、スタック上の最後のアイテムはポップできません。

また、スタックの最上位にある新しいビューコントローラに関連付けされたビューを表示する場合、このメソッドはそれに応じてナビゲーションバーとツールバーを更新します。

iOS 3.0以降では、組み込まれているナビゲーションツールバーのコンテンツは、新しいビューコントローラのツールバーアイテムを反映して更新されます。

ナビゲーションバーの更新についての詳細は、『ナビゲーションバーの更新』を参照してください。

animated:この値にYESを設定した場合は遷移をアニメーションします。
ビューを表示する前にナビゲーションコントローラを設定する場合はNOを渡してください。


pushViewController:animated:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

レシーバのスタック上のビューコントローラをプッシュして、表示を更新します。

viewControllerパラメータ内のオブジェクトが、ナビゲーションスタックの一番上のビューコントローラになります。

ビューコントローラをプッシュすると、表示しているビューの管理になります。

animatedパラメータにより、ビューの表示が決定されます。

animatedパラメータがYESの場合は、ビューがアニメーションで挿入され、そうでない場合は単純にビューが切り替わります。

表示する前、ナビゲーションバーやツールバーがある場合は、ビューは自動的にサイズ調整して表示します。

スタックの最上部に新しいビューコントローラと関連するビューを追加表示する場合、このメソッドはナビゲーションバーやツールバーも表示を更新します。

iPhone OS 3.0以降では、新しいビューコントローラのツールバーアイテムが反映され、組み込みのナビゲーションツールバーの内容が更新されています。
(『ナビゲーションバーの更新』参照)

重要:iPhone OS 2.2以降では、viewControllerパラメータ内のオブジェクトが既にナビゲーションスタックにある場合、このメソッドは例外を発生します。
(それ以前のバージョンのiPhone OSでは、何もしません)

viewController:スタックにプッシュするビューコントローラを指定します。
このオブジェクトはタブバーコントローラのインスタンスや、既にスタックしているナビゲーションスタックを指定できません。

animated:YESを指定した場合はアニメーションでビューを切り替え、NOの場合はアニメーションしません。
ナビゲーションコントローラの起動時にNOを指定することもできます。



●定数



参考文献

UINavigationController Class Reference






SoundSport Pulse wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
04 | 2017/05 | 06
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 31 - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

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

Wish List
WACOM


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

SoundSport Pulse wireless headphones
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