1

ナビゲーションコントローラーで動作する階層の複数のレベルを取得しようとしています。3つのレベルの階層があり、階層のレベルを下に移動できますが、最初のビューに戻るには、2つのレベルではなく、1つのレベルにしか戻ることができません。

まず、ビュー#1のナビゲーションコントローラーを作成し、次のビューであるビュー#2をその上にプッシュします。次に、didSelectRowAtIndexPathのウィンドウのサブビューにナビゲーションコントローラーを追加します。ビュー#1のテーブル行をクリックすると、次の階層レベルのビュー#2に移動します。

この次の階層レベルのビューは、テーブルビューでもあります。ここで問題が発生すると思います。別のナビゲーションコントローラーを作成し、ビュー#2のビューコントローラーのdidSelectRowAtIndexPathでビュー#3をプッシュします。ビュー#2のテーブル行をクリックすると、ビュー#3に移動します。しかし、戻るボタンを使用してビュー#2に戻ると、実際のビュー#2ではなく、空のビューに戻ります。

  1. 2つのナビゲーションコントローラーではなく、3つのレベルの階層を処理するために必要なナビゲーションコントローラーは1つだけですか?

  2. #1が「はい」の場合、ビュー#3をナビゲーションコントローラーにプッシュできるように、ナビゲーションコントローラーをビュー#2のコントローラーに渡すにはどうすればよいですか?

  3. または、ビュー#1のナビゲーションコントローラーに3つのビューすべてをプッシュする必要がありますか?

  4. または...?

前もって感謝します、

ジム

4

4 に答える 4

4

UIViewController、と連携して動作するように設計されていUINavigationControllerます。新しいビューをプッシュすると、UINavigationControllerはそれ自体への参照とUINavigationItem、ナビゲーションに関するメタデータ(背後にあるビューのタイトルが付いた戻るボタンなど)への参照を挿入します。

一般に、UINavigationController「NIB名」フィールドを使用してInterface Builderで初期化し、「ルートビューコントローラー」(つまり、戻るボタンがないはずの最初に表示されるビュー)を指定します。同等のコードは、おおよそ次のようになります。


UIViewController *rootController = [[UIViewController alloc] initWithNibName:@"RootController"];
UINavigationController *navCtl = [[UINavigationController alloc] initWithRootController:rootcontroller];

次に、新しいView Controllerをプッシュする必要がある場合(おそらくdidSelectRowAtIndexPathrootControllerのdelegateメソッドで)


SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController"];
[self.navigationController pushViewController:secondViewController];
[secondViewController release];

プロパティを作成する必要がなかったことに注意してください。self.navigationControllerプロパティはすでに定義されてUIViewControllerおり、ナビゲーションの現在の状態に応じて適切な参照が挿入されます。それは魔法のように機能します!

于 2009-03-15T09:10:58.617 に答える
4

Apple Developer サイトの DrillDownSave サンプル コード:

https://developer.apple.com/library/ios/#samplecode/DrillDownSave/

ナビゲーションコントローラーを使用して、ビューの3つの階層レベルで探していることを正確に行います。回答ありがとうございます。

ジム

于 2009-03-16T14:02:54.540 に答える
1

一般に、すべての階層は単一のUINavigationControllerに含まれている必要があります。それらのネストがサポートされているかどうかはわかりません。

于 2009-03-15T01:16:09.117 に答える
0

後続のビューが同じコントローラーの追加インスタンスである場合、これをどのように行いますか。これは、テーブルビューにすぎない真の階層です...例はハードコードされたビューを示しています...しかし、それらは本質的に同じことをします. 私のオブジェクト指向のバックグラウンドは、コントローラーの新しいインスタンスを割り当て/初期化した場合、それをプッシュして、その状態をポップ (戻るボタン) で復元できるべきではないということです。それは私にはうまくいかないようです。コントローラー (UITableViewController) の各インスタンスには、データとして配列の独自のインスタンスがあります...

于 2009-03-23T22:56:08.320 に答える