在哪里放置根控制器?

Posted

技术标签:

【中文标题】在哪里放置根控制器?【英文标题】:Where to put Root Controller? 【发布时间】:2010-07-02 10:05:55 【问题描述】:

我在 xcode 中为 iPhone 做的事情越来越好,但在这里我遇到了死胡同。

我正在尝试构建一个具有两个视图的应用程序:主视图和设置视图。我希望能够在他们两个之间切换。因为我需要主视图中的每个像素,所以我构建了一个 switchView 类,当我按下一个按钮(比 tabView 小得多)时,它只在两个视图之间切换,效果很好。

现在我的开发工作更深入了,我希望设置视图成为一个表格视图,从中我可以导航到下一个详细级别。我以前也这样做过,但没有切换视图。

我的问题是我让表格视图(在设置中)工作,但是一旦我尝试推动我的视图控制器,什么也没有发生。在调试时,我可以看到它通过代码工作(例如,didSelectRowAtIndexPath 正在工作)但没有弹出新视图。没有任何错误信息。

我在 MainWindow.xib 中添加了 switchView,然后执行 [窗口添加子视图:switchViewController.view];在我的 AppDelegate 中加载主视图。

我应该把表格视图导航的根控制器放在哪里?因为我猜这就是我的问题?

下面的代码什么都没有……

ViewsAppDelegate *delegate =[[UIApplication sharedApplication] delegate];

    [delegate.settingsNavController pushViewController:settingsDetailViewController animated:YES];

很高兴任何可以引导我走上正轨的建议。花了太多时间来解决这个问题。

【问题讨论】:

【参考方案1】:

我可能误解了你的目的,但让我试试......

当您创建项目时,您应该已经启动并为您创建了 MainViewController 和 AppDelegate。从您提供的 sn-p 来看,在我看来,您在 MainViewController 中实例化了一个新的(可能是第二个)应用程序委托。

我建议您将 NavigationController 上移一级到 SDK 提供的 AppDelegate,而不是这样做。然后在您的 MainViewController 中,将现有的 AppDelegate 添加为 IBOutlet 并将它们全部绑定到 IB 中。完成后,使用导航控制器应该会更加顺畅。

例如,我的 MainWindow.xib 有几个对象,我突出显示了我认为您可能关心的两个...

http://www.freeimagehosting.net/uploads/f50268da03.png

*抱歉链接 - 我还不能发布图片。

然后,从我的 AppDelegate 自定义我的 applicationDidFinishLaunchingWithOptions 像这样...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions     

  navController.viewControllers = [NSArray arrayWithObject:mainMenuController];

  // Override point for customization after app launch    
  [window addSubview:navController.view];
  [window makeKeyAndVisible];

  return YES;

这将 navController 保持在***别(我认为它所属的位置),并允许您在整个应用程序中推送和弹出视图,同时保留堆栈中内容的历史记录。

希望对您有所帮助 - 我可能完全误解了您的目标。

祝你好运! 鲍勃

【讨论】:

感谢 Bobby 我想要实现的目标(即使我可能以错误的方式开始)类似于 Apples Weather App 中的内容。您有一个主屏幕,单击小 i 后,您将进入设置屏幕。在那个屏幕上,我想要一个带有向下钻取导航的 tableView。所以我从一个普通的基于 Windows 的应用程序开始,然后在两个视图之间切换。工作得很好。但是,当我想在其中一个视图中添加向下钻取 tableView 时(并且仍然是)卡住了。也许我应该尝试基于实用程序的模板...??? 我建议您考虑查看基于视图的模板,然后阅读一些关于如何使用导航控制器的教程。网上有一些快速免费的 (youtube.com/watch?v=9ozwoETFei0),如果你不介意花一些钱 (5 美元),Pragmatic Programmers 的人有一个非常好的 iPhone SDK 教程系列 (pragprog.com/screencasts/v-bdiphone/…)。第二集将是完美的。有了这些知识,您应该能够很快地修改您拥有的内容。祝你好运! 谢谢,我上周一定是脱水了。什么都没有真正起作用,但现在已经解决了。感谢您的回复和支持!

以上是关于在哪里放置根控制器?的主要内容,如果未能解决你的问题,请参考以下文章

在哪里放置业务逻辑,在控制器或服务中? [复制]

在哪里放置不是模型、视图、控制器或助手的 Rails 代码?

PHP Slim 3 Framework - 我可以在哪里放置我的控制器文件?

在哪里放置加载和保存功能

Rails 在哪里放置诸如 ini 文件之类的配置?

在 MVC 中,我在哪里放置数据库查询?