参考点:替换Root View Controller / App Delegate?

时间:2011-08-10 15:08:17

标签: iphone objective-c xcode

显然,我是iOS开发的新手,我在网上找到的很多教程都遇到了一些问题。虽然我理解了进入这些程序的大部分代码,但我无法弄清楚如何翻译这一事实,这可能很简单。

许多教程要么使用基于导航的模板,要么使用基于视图的模板,但我想尝试构建标签栏应用程序。教程使用App Delegate或rootViewController(作为导航控制器),但由于我的标签栏是我的rootViewController,我总是遇到问题。我也无法在大多数代码中使用applicationDidFinishLaunching方法,因为它在技术上仅适用于启动时的第一个选项卡。

这是我的问题:

  1. 有没有办法将这些文件“翻译”成新类(例如,为每个单独的选项卡创建App Delegate代码的NSObject实例或创建UINavigationViewController实例)?

  2. 如果我可以创建NSObject的实例,我如何确保代码链接到我在viewController中创建的对象?

  3. 如果我可以创建一个使用UINavigationController的文件,如何让程序暂时允许Nav Controller成为rootViewController。

  4. 非常感谢提前!

2 个答案:

答案 0 :(得分:1)

在我的头顶上,我只能为你回答3号,你可以用我知道的两种方式中的一种来做到这一点,如果有人看到其中任何一种是不正确或不好的做法,我希望有人纠正我,因为这是我一直在做的。

[appDelegate.window addSubview:appDelegate.newRootViewController.view];
appDelegate.window.rootViewController = appDelegate.newRootViewController; 

[self.navigationController pushViewController:appDelegate.newRootViewController animated:YES];

两者都应该完成相同的事情,但如果你可以帮助它,第二个版本是理想的。还值得注意的是,对于第一个,没有欺骗,你实际上是将你的应用程序的rootViewController设置为不同的东西。

我会做一些挖掘,看看我是否也可以为你解答任何其他问题。

编辑:所以在重新阅读并进一步思考之后,我认为可以通过澄清标签栏应用来回答其他两个问题。不幸的是,我对iOS也很新,我没有机会创建一个标签栏应用程序,所以我不想给你不正确的信息。我建议您查看http://www.techotopia.com/index.php/Creating_an_iOS_4_iPhone_Multiview_Application_using_the_Tab_Bar_%28Xcode_4%29,希望它能让您更好地了解Tab Bar Apps的工作原理。我一直在使用该电子书和该网站的另一本电子书结合Ray Wenderlich的教程来自学。

无论如何,我希望这在某种程度上有所帮助,如果你想让我澄清或详细讨论任何评论,我会看看我是否能提供帮助。

祝你好运!

-Karoly

答案 1 :(得分:0)

您误解了应用代表的工作方式。

它是应用程序的委托,而不是控制器。调用applicationDidFinishLaunching时,可以从xib加载控制器,但两个事件之间没有连接。

applicationDidFinishLaunching只是在应用程序准备就绪之前进行最终设置的地方。

如果你没有在主xib文件中实例化标签栏控制器,你可以在这里实例化它,然后实例化它的所有控制器并将它们添加到标签栏控制器。当你这样做时,你可以加载plists,在控制器上设置属性等等。

如果您在主xib文件中实例化标签栏控制器,您仍然可以在此处访问其控制器。您可以编辑这些控制器或将它们抛出并创建新的控制器。您甚至可以扔掉标签栏控制器并切换到导航控制器。

我无法回答问题1和2,因为它们背后的假设是无效的。

不要问你如何解决应用委托和标签栏控制器的感知问题,而是描述你想要完成的事情。