Objective-c 如何正确管理多个视图和控制器

Posted

技术标签:

【中文标题】Objective-c 如何正确管理多个视图和控制器【英文标题】:Objective-c How properly mange multiple views and controllers 【发布时间】:2011-05-14 20:13:43 【问题描述】:

我有一个应用程序,最初有一个 TabBarController,每个选项卡都是一个 ViewController,每个选项卡都有一个调用其他控制器的按钮。

那么我应该如何构建它?有一个主要的 rootviewController(如果有,如何?)?还是在 appdelegate 中只调用 tabBarController 并且在每个选项卡内的 viewControllers 中调用其他控制器?

让我可以灵活地前进、后退和转换视图的最佳方式是什么?

不知道我有没有说清楚……

谢谢大家。

【问题讨论】:

【参考方案1】:

通常,您将从名为“Tab Bar Application”的模板开始,从 Xcode 4 开始,首先加载 MainWindow Nib,它包含一个选项卡栏,并且选项卡栏在 IB 中设置为具有 2 个视图控制器,称为“ FirstViewController”和“SecondViewController”...

如果它适合您,您可以遵循该模式,否则您可能希望从基于视图的应用程序开始并添加您自己的标签栏。我个人觉得通过UITabBarDelegate 控制标签栏更容易,特别是如果你打算做一些稍微深奥的事情。

编辑:

如果您计划加载导航控制器堆栈或单个模式视图,则基本上是两种方法之一。

1)

ThirdViewController * controller = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
UINavigationController * myNavigationController = [[UINavigationController alloc] initWithRootViewController:controller];

[self presentModalViewController:myNavigationController animated:YES];
[controller release];
[myNavigationController release];

2)

ThirdViewController * controller = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
[self presentModalViewController:controller animated:YES];
[controller release];

通过在调用当前模式的视图控制器上调用以下命令返回 Tab 环境。

[自己 dismissModalViewControllerAnimated:YES];

【讨论】:

如果你必须从第一个或第二个视图控制器转换到另一个控制器,你会在哪里调用它?在 rootTabBarController 中? 您以编程方式希望根据某事从一个切换到两个...比如说按下按钮?设置 selectedViewController 属性。 但是例如,假设我有一个 TabBarController,有名为 AViewController、BViewcontroller 和 CViewController 的选项卡。例如,如果我想当我触摸 AViewController 中的按钮以显示另一个视图时,最好的方法是什么?在 AViewController 中调用视图或将选择器发送到根 TabBarController 并在那里调用它?顺便说一句,我读到我不应该继承 UITabBarController,我打算怎么做?

以上是关于Objective-c 如何正确管理多个视图和控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone / iPad 的应用程序中正确使用保留和释放

子视图的objective-c管理顺序

如何在 Objective-C 中管理、跟踪或同步多个服务器的异步请求?

Xcode6/Swift - 如何在多个视图控制器中实现 iAdBannerView?

Objective-C - 理解视图控制器

如何在 Tab bar 控制器中使用一个 Xib 并创建多个视图控制器? [目标-C]