【问题标题】:Where is UIWindow instantiated and the storyboard passed in?UIWindow 是在哪里实例化的,storyboard 是在哪里传入的?
【发布时间】:2012-10-06 04:30:14
【问题描述】:

我想知道是否有人可以解释(或指出我正确的方向)

  1. 不使用情节提要时,用于实例化 UIWindow 的代码消失在哪里?在空应用程序项目模板中,该窗口是在您的 AppDelegate 中的应用程序 didFinishLaunnching... 中创建的。

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    

    但是如果使用故事板,上面的代码就被省略了,虽然 UIApplication 显然知道从哪个窗口开始。

  2. 应用程序在哪里查找 info.plist 文件以了解从哪个情节提要开始。

我确定这一切都在我没有找到的地方得到了很好的记录。阅读此Where is the UIWindow instantiated in an iPhone app? 但没有太大帮助。我在 iOS 上已经有一段时间了,直到现在,我才不必在应用程序的初始启动上搞砸。谢谢

【问题讨论】:

    标签: iphone ios storyboard ios6


    【解决方案1】:

    我认为您的意思是“当您使用情节提要时,代码消失在哪里。”

    应用程序根据 Info.plist 中的“主故事板文件基本名称”(UIMainStoryboardFile) 键加载故事板,并从该故事板加载带有“是初始视图控制器”切换设置的视图控制器。

    编辑:根据 cmets 的要求,以下代码(类似于基于 xib 的应用程序中的初始加载)将允许您在应用程序启动时按名称加载和显示情节提要:

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"StoryboardName" bundle:nil];
        UIViewController *viewController = [storyboard instantiateInitialViewController];
        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];
        return YES;
    }
    

    【讨论】:

    • 我会改写一下,我将如何在运行时以编程方式更改初始情节提要?如果我创建一个空的非故事板应用程序,我可以通过以下方式添加故事板:1. 创建一个,2. 将密钥添加到 Info.plist,然后 3. 删除 appDelegate 中的窗口分配代码。但是我将如何分配不同的故事板基于应用加载的任何时间?
    • 这就是你应该在你的视图控制器中做的事情,你有什么理由想要在应用程序启动时有条件地加载不同的故事板?无论如何,我花了一些时间并设法弄清楚如何做到这一点,我已经相应地编辑了问题。
    【解决方案2】:

    使用故事板时,要加载的故事板来自您应用的 Info.plist 文件。

    在您的 Info.plist 文件中将有一个部分包含如下键值对:

    <key>UIMainStoryboardFile</key>
        <string>MainStoryboard</string>
    

    在这种情况下,MainStoryboard 是加载的默认故事板的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 2012-10-05
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多