1

UIViewControllerを使用してオブジェクトの階層を処理する iOS アプリケーションを開発していますUINavigationController

MenuViewController
  |
  |-ListOfAnimalsViewController
    |
    |-AnimalDetailsViewController
  |
  |-ListOfPlantsViewController
    |
    |-PlantDetailsViewController

アプリケーションはNSNotification、特定の動植物の情報を含むローカル オブジェクトを受け取ります。通知に触れたときの通常の動作は、アプリケーションを開き、階層内の最初のビュー コントローラーをロードすることです。

UIViewController代わりに、階層の深いインスタンスにプログラムで移動する方法はありますか?

編集:コントローラーをナビゲーション スタックにプッシュすることを求めているのではなく、以前のコントローラーもプッシュすることを求めています。つまり、ナビゲーション スキーマを上記に保持したいと考えています。

4

4 に答える 4

0

クラスの名前がわかっている場合は、次のコードを使用してナビゲートできます。

NSString *className = @"viewControllerName";

    UIViewController* myClass = (UIViewController*)[[NSClassFromString(className) alloc] init];
[self.navigationController pushViewController:myClass animated:YES];
于 2012-11-22T13:37:32.130 に答える
0

次の方法でスタックを再構築します。

MenuViewController *menuController = [[MenuViewController alloc] init];
ListOfAnimalsViewController *listController = [[ListOfAnimalsViewController alloc] init];
AnimalDetailsViewController *detailsController = [[AnimalDetailsViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] init];
[navigationController setViewControllers:@[menuController, listController, detailsController]];
self.window.rootViewController = navigationController;

実装に基づいて、いくつかのプロパティを設定する必要がある場合があります。

于 2014-03-20T14:35:59.880 に答える
0

順序を定義する iOS ビュー コントローラーの静的定義には何もないため、ナビゲーション順序に従うための独自のメカニズムを発明する必要があると思います。(セグエは可能な限り近いように見えますが、それほど近いわけではありません。)

深さが不明なView Controllerの階層に対してこれを行う必要がある場合は、ネットワークルーティングのようなパスで機能するスーパークラスを作成することを検討します。などのメソッドがありdisplayNextControllerOnPath:(NSString *)pathます。MenuViewControllerサブクラスだったAは、 RoutingController@"ListOfAnimalsViewController.AnimalDetailsViewController" のようなパスを受け取り、最初のパス要素を取り除き、それをインスタンス化し (別のRoutingControllerサブクラスです)、@"AnimalDetailsViewController" を送信します。

その他の詳細には、いつ停止するかを知ること、およびコンテンツとして使用する最後のコントローラーのペイロードとしてオブジェクトまたは辞書を渡すことなどが含まれます。

于 2012-11-22T14:08:09.350 に答える