web-dev-qa-db-ja.com

presentViewControllerとUINavigationControllerの違いは?

presentViewControllerUiNavigationControllerの違いを教えてください。 presentViewControllerの代わりにUINavigationControllerを使用して、アプリのさまざまなビューをナビゲートできますか?どちらを使用するシナリオですか?

33
user1940888

presentViewControllerは、いわゆるモーダルビューコントローラーを表示するメカニズムを提供します。つまり、表示コントローラーの上に重ねることでUIを完全に制御するビューコントローラーです。

UINavigationControllerは、新しいコントローラーをプッシュし、後でそれをポップして、前のコントローラーに順序どおりに戻すことができる、はるかに柔軟なメカニズムを提供します。 Navigation Controllerのコントローラは、左から右にシーケンスを作成するだけだと想像してください。

presentViewControllerは、一度に表示されるone View Controllerのみでの使用に最も適していると思います。それを使用して、より多くのView Controllerを積み重ねることができます(したがって、貧しい人のNavigation Controllerを「模倣」する)が、私の予想では、機能していないものがすぐに見つかるでしょう。

具体的には、このような制限の例は次のとおりです:モーダルビューコントローラーを閉じると(「閉じる」ために)、モーダル表示されたすべての(同じ表示コントローラーからの)ビューコントローラーも一度に閉じられます。したがって、機能のような「戻る」/ナビゲーションを実装することはできません。

ですから、あなたが何をしようとしているかに依存します。

68
sergio

UINavigationControllerは、View Controllerのスタックを管理し、戻るボタンなどを追加するUIViewControllerのサブクラスです。

presentViewControllerは、モーダルビューコントローラーの表示に使用するUIViewControllerクラスのメソッドです。

24
Andrew Tetlaw

UINavigationControllerは、ナビゲーションスタックを管理します。その後、階層コンテンツをナビゲートできます。

http://developer.Apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

UIViewControllerspresentViewControllerメソッドを使用する場合、基本的にView Controllerを置き換えるだけです。ナビゲーションスタックは維持されません。

5
mgr

UINavigationControllerはクラスであり、presentViewControllerはUIViewController(iOS 5 +)のインスタンスメソッドであり、そのUINavigationControllerはサブクラスです。

pushViewControllerはpresentViewControllerに匹敵するメソッドです。これは、iOS 2 +のUINavigationControllerのインスタンスメソッドです。

2
Andy