据我所知,如果我们想要显示 UIWindow ,我们需要执行以下步骤:
- 创建UIWindow
- 加载mian.storyboard并实例化视图控制器
- 将控制器设置为UIWindow的根视图控制器,然后使UIWindow显示
醇>
,如下所示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//创建窗口对象
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
//创建窗口的根控制器,并且赋值
UIViewController *rootVc = [[UIViewController alloc]init];
self.window.rootViewController = rootVc;
//显示窗口
[self.window makeKeyAndVisible];
return YES;
}
或带故事板的初始化
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIStoryboard *stroyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [stroyboard instantiateInitialViewController];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
return YES;
}
但是在模板中,我看不到那些代码,有什么我忽略的吗?
答案 0 :(得分:1)
当您选择单一视图模板时,会在场景后面自动发生一些事情。
在您的IB中,View Controller
用户界面会检查 是初始视图控制器 属性。这意味着此View Controller是根视图控制器。
然后您在上图中看到您的视图控制器获得了Object ID
。此ID与initialViewController
的{{1}}文件的.xml
属性相匹配。如果右键单击故事板文件并选择源代码,您将看到如下内容:
storyboard
基本上就是这样,模板会挂钩你之前需要从代码中编写的设置。现在你不必。这些都发生在单视图模板的场景之后。
答案 1 :(得分:0)
这是非常古老的代码。 Xcode有不同的流程来加载初始窗口。您不再需要该代码,如果您想知道,您可以通过检查plist来了解它是如何开始加载的。在plist里面有一个名为" Main Storyboard文件基本名称的属性" aka"" UIMainStoryboardFile",如果设置了这个,那么它将在那里加载。
供参考,这是您以编程方式显示自己的初始视图控制器(忽略IB)的方法
Programmatically set the initial view controller using Storyboards
答案 2 :(得分:0)
执行此流程:选择YourProject
- > TARGETS
- > General
- > Deployment Info
- > Main Interface
,有一个选择textfiled。
如果您选择了Storyboard.storyboard
,那么StoryBoard会自动执行初始化。在项目中选择Storyboard.storyboard,Open As
- > Source Code
可以在故事板中看到此代码段XML代码:
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
Xcode只是使用该XML配置进行自动初始化。
如果您清除选择文本字段,Xcode将不会自动初始化窗口和ViewController,那么您应该手动使用该代码初始化UIWindow。