13

我的项目中有 2 个视图控制器。在 View Controller1 内部,我想通过按下按钮切换到 View Controller 2。目前我这样做

- (IBAction)startController2:(id)sender {

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

这似乎工作正常,但按钮按下和第二个视图控制器出现之间有很大的延迟(4 秒)。如果我直接从 AppDelegate 调用 viewController2,加载速度会更快。我在这里做错了什么。任何帮助是极大的赞赏。

4

5 回答 5

40

有几件事要考虑。

第 1 部分:“我在这里做错了什么”?

  1. 你绝对不是故意的self.view = vc2.view。您只需让一个视图控制器负责另一个视图控制器的视图。你可能想说的是[self.view addSubview:vc2.view]。仅此一项就可以解决您的问题,但是...

  2. 实际上不要使用该解决方案。尽管它几乎直接来自一些流行的 iPhone 编程书籍中的示例,但这是一个坏主意。阅读“滥用 UIViewControllers”以了解原因。

第 2 部分:你应该做什么

这一切都在“从其他视图控制器呈现视图控制器”一章中。

它会归结为:

于 2012-04-22T05:43:40.140 回答
4

您应该考虑使用UINavigationController来切换视图控制器。如果您的构建目标是 iOS 5.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 回答
0
[aController presentViewController:bController animated:NO completion:nil];
[bController presentViewController:cController animated:NO completion:nil];

当你想关闭 cController 时,你可以这样做

[aController dismissViewControllerAnimated:NO completion:nil];

这是流程图。

aController → bController → cController
    ↑___________________________↓
于 2017-09-12T03:20:14.003 回答
-1

您应该使用 UINavigationController 来切换视图控制器。

您在 View1 上并在按钮单击方法上添加以下代码。

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

于 2013-11-12T08:01:15.040 回答