xib替代main.storyboard

xib替代main.storyboard

其实xib和storyboard在编译时都会变成nib文件。

删除storyboard

删除main.storyboard和ViewController

创建新VC

因为上一步干脆删掉了自带的ViewController,所以这里创建一个新的VC。

创建

创建自定义VC,叫做“TestXibViewController”:

  1. File–>new–>file…–>ios–>Cocoa Touch Class。
  2. 命名TestXibViewController,记得选中Also create XIB file然后确认即可。
    此时会自动生成两个文件,都叫“TestXibViewController”,只不过一个swift,一个xib文件。

补充

  • 如果上一步没选中Also create XIB file,就不会自动关联这两个文件。
    没自动关联解决办法:
  1. 打开xib,选择左侧窗口的Placeholders的File’s Owner,点击;
  2. 右侧工具栏选中最后一个tab(连接),可以看到有一个view没有连接,
  3. 点击view后的加号,按住control,拖到屏幕上的view视图上就算建立连接了。

删除旧配置

  • IOS13之前:
    app配置的Deployment Info里找不到Main Interface去清除默认的main.storyboard。
  • IOS13之后:
    删除info.plist中的Main storyboard file base name和Application Scene Manifest下的Storyboard Name。

让新建VC可以展示

编辑window,让其指向TestXibViewController,作为展示。

  • IOS13之前:
    AppDelegate的application(didFinishLaunchingWithOptions)重载方法:
//实例化上面定义的window,参数frame描述view的位置和大小
self.window = UIWindow(frame: UIScreen.main.bounds)//UIScreen.main.bounds指的是屏幕边界
//设置UIWindow有一个根视图叫TestXibViewController
self.window?.rootViewController = TestXibViewController(nibName: "TestXibViewController", bundle: nil)
self.window?.makeKeyAndVisible()//显示app窗口
//注意:这个类应该已经定义了一个  var window: UIWindow? 前面的self.window就是指向它。
  • IOS13之后:
    SceneDelegate的scene(willConnectTo)重载方法:
if let windowScene = scene as? UIWindowScene {
    self.window = UIWindow(windowScene: windowScene)
    self.window?.rootViewController = TestXibViewController(nibName: "TestXibViewController", bundle: nil)
    self.window?.makeKeyAndVisible()
}

补充:为什么会有这个差异?

iOS13的推出,在之前AppDelegate的基础上多出了一个SceneDelegate,
会将AppDelegate里的lifecycle的那些代理方法转交给SceneDelegate。
其实就是UI的东西委托给SceneDelegate了,AppDelegate更专注app本身了。
SceneDelegate,是iPadOS用来做多窗口支持的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值