【问题标题】:Point of Reference: Replacing the Root View Controller / App Delegate?参考点:替换根视图控制器/应用程序委托?
【发布时间】:2011-08-12 00:56:41
【问题描述】:

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

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

这些是我的问题:

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

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

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

非常感谢!

【问题讨论】:

    标签: iphone objective-c xcode


    【解决方案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,希望它能让您更好地了解标签栏应用程序的工作原理。我一直在使用该电子书以及该网站的另一本电子书以及 Ray Wenderlich 的教程来自学。

    无论如何,我希望这在一定程度上有所帮助,如果您希望我尝试澄清或详细说明任何内容,请发表评论,我会看看是否可以提供帮助。

    祝你好运!

    -卡罗利

    【讨论】:

    • 不幸的是,我没有选票了。这是一个很好的答案。明天会投票。
    【解决方案2】:

    您误解了应用委托的工作原理。

    它是应用程序的委托,而不是控制器。在调用 applicationDidFinishLaunching 时,您的控制器可能会从 xib 加载,但这两个事件之间没有联系。

    applicationDidFinishLaunching 只是您在应用准备好使用之前进行最终设置的地方。

    如果你没有在你的主 xib 文件中实例化你的标签栏控制器,你可以在这里实例化它,然后实例化它的所有控制器并将它们添加到标签栏控制器。在执行此操作时,您可以加载 plist、在控制器上设置属性等。

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

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

    与其询问您如何解决应用代理和标签栏控制器的感知问题,不如描述您想要完成的任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2011-12-29
      • 2013-10-29
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      相关资源
      最近更新 更多