导航和视图控制器问题

Posted

技术标签:

【中文标题】导航和视图控制器问题【英文标题】:Navigation & View Controller questions 【发布时间】:2009-11-20 22:37:34 【问题描述】:

我正在 Interface Builder 中尝试使用 ViewControllers 和 NavigationControllers,试图更好地了解与什么相关联的内容以及原因……我正在为一个让我感到困惑的场景而苦苦挣扎。希望有人能纠正我...

假设我从典型的 iPhone 模板基于视图的应用程序开始,然后显示一个由视图控制器 (viewController) 处理的视图。然后在某个事件之后,我想用“典型的”基于导航的视图 (rootVC) 替换该视图。我想在 IB 中创造尽可能多的东西。我的问题与如何显示 rootVC 和删除前一个 viewController 的所有痕迹有关,因为用户永远不需要返回以及在 IB 中的 navController 中连接的位置/方式。目前是时候显示 rootVC 我在我的 viewController 中执行以下操作:

RootVC *rvc = [[RootVC alloc] initWithNibName:@"RootVC" bundle:nil];
[rvc.view setFrame:[[UIScreen mainScreen] applicationFrame]];

ViewTestAppDelegate *appDelegate = (ViewTestAppDelegate *)[[UIApplication sharedApplication] delegate];
self.rootVC = rvc;
[rvc release];
[appDelegate.viewController.view removeFromSuperview];
[appDelegate.window addSubview:rootVC.view];
[appDelegate.viewController release];

rootVC 显示,除了 viewController 的保留计数仍为 1?!?

另外,rootVC 的 navigationController 应该在哪里实例化?从基于视图的模板开始,MainWindow.xib 包含一个用于 viewController 的对象(它有自己的 ViewController.xib)、一个 appDelegate 和一个 UIWindow。我的 RootVC.xib 包含一个 UITableView。我是否还需要另一个中间视图控制器,它具有另一个 ApplicationDelegate 对象,我连接到 UIWindow 对象和 UINavigationController?与 IB 的 Navigation Controller 对象一起提供的 View Controller 会被设置为我的 RootVC 类吗?

对不起,冗长。我很难解释。因为 IB 中的某些对象是代理,而有些是“真实的”,所以在尝试“新”事物时,有时会感到困惑(对我来说)需要什么、何时何地。基本上我想知道如何设置一个视图导致另一个视图无法返回第一个视图。第二个视图基本上成为在许多方向产生的“主要”根......

【问题讨论】:

我个人不喜欢将 IB 用于 iPhone Dev,因为制作 iPhone UI 非常容易。 IB 更适合制作复杂的 UI(即在 OS X 上,而不是 iPhone)。 @Mk12:不要害怕界面生成器:iphonedevelopment.blogspot.com/2009/10/… 【参考方案1】:

我建议使用基于导航的 iPhone 应用程序模板,并将一次性视图作为模式视图呈现在根视图之上。

【讨论】:

【参考方案2】:

我可以通过在 MainWindow nib 中放置对 viewController 的引用,然后在将 navigationController 和 rootVC 添加到 UIWindow 后自动释放 viewController 来解决这个问题。一路上学到了关于 IB 的另一两件事。相当强大...

【讨论】:

以上是关于导航和视图控制器问题的主要内容,如果未能解决你的问题,请参考以下文章

在导航视图控制器中加载特定视图

导航控制器到不是初始视图控制器的视图控制器

交替使用拆分视图控制器和导航控制器作为窗口根视图控制器

iphone导航控制器和表格视图

使用导航控制器在视图之间导航

在导航控制器中使用 Auto Layout 的主视图和滚动视图之间的差距