13

私のプロジェクトには 2 つのビュー コントローラーがあります。View Controller1の内部 ボタンを押してView Controller 2に切り替えたい。現在、私はこれを行っています

- (IBAction)startController2:(id)sender {

viewController1 vc2 = [[viewController2 alloc] init];
self.view = vc2.view;
}

これは問題なく動作しているように見えますが、ボタンを押してから 2 番目のビュー コントローラーが表示されるまでに大きな遅延 (4 秒) があります。AppDelegate から直接 viewController2 を呼び出すと、読み込みが速くなります。ここで何が間違っていますか。どんな助けでも大歓迎です。

4

5 に答える 5

40

考慮すべき点がいくつかあります。

パート 1: 「ここで何が間違っているのか」?

  1. あなたは間違いなくそうするつもりはありませんでしたself.view = vc2.view。1 つのビュー コントローラーを別のビュー コントローラーのビューに割り当てるだけです。おそらくあなたが言いたいのは[self.view addSubview:vc2.view]. これだけで問題が解決するかもしれません...

  2. 実際にそのソリューションを使用しないでください。一部の人気のある iPhone プログラミングの本のサンプルからほとんど直接引用していますが、それは悪い考えです。理由を理解するには、「UIViewControllers の悪用」を読んでください。

パート 2: 何をすべきか

それはすべて、 「他のView ControllerからのView Controllerの表示」の章にあります。

次のいずれかになります。

  • UINavigationController (こちらの優れた Apple ガイドを参照してください)。[navigationController pushViewController:vc2]

  • andoabhay が提案するように、モーダル ビュー コントローラの「手動で管理される」スタック

  • ジェイソンが示唆するように、VCを別の子として明示的に追加する

于 2012-04-22T05:43:40.140 に答える
4

UINavigationControllerビューコントローラの切り替えにを使用することを検討する必要があります。ビルドターゲットがiOS5.0以降の場合は、新しいコントローラーコンテナーの概念を使用することもできます[mainViewController addChildViewController:childViewController]

于 2012-04-22T05:13:48.813 に答える
2

次のように使用presentModalViewControllerします

[self presentModalViewController:vc2 animated:YES completion:^(void){}];

viewController1使用中

[self dismissModalViewControllerAnimated:YES completion:^(void){}];

前のコントローラーに戻りたい場所。

于 2012-04-22T05:13:56.130 に答える
-1

ビュー コントローラを切り替えるには、UINavigationController を使用する必要があります。

View1 にいて、ボタン クリック メソッドに次のコードを追加します。

View2 *View2Controller = [[View2 alloc] initWithNibName:@"View2" bundle:nil]; [self.navigationController pushViewController:view2Controller animated:YES];

于 2013-11-12T08:01:15.040 に答える