xib替代main.storyboard

news/2024/10/23 7:28:23/

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用来做多窗口支持的


http://www.ppmy.cn/news/63107.html

相关文章

《Linux 内核设计与实现》12. 内存管理

文章目录 页区获得页获得填充为 0 的页释放页 kmalloc()gfp_mask 标志kfree()vmalloc() slab 层slab 层的设计slab 分配器的接口 在栈上的静态分配单页内核栈 高端内存的映射永久映射临时映射 每个 CPU 的分配新的每个 CPU 接口 页 struct page 结构表示系统中的物理页&#x…

Rosetta从头蛋白抗体设计、结构优化及在药物研发中的应用

Rosetta从头蛋白抗体设计、结构优化及在药物研发中的应用 第一天 内容 主要知识点 从蛋白质折叠到蛋白质设计教学目标:了解本方向内容、理论基础、研究意义。 蛋白质折叠与结构预测简介 主链二面角与二级结构侧链堆积与三级结构蛋白质设计简介 蛋白质设计的分…

【RabbitMQ】SpringAMQP

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应&am…

微服务学习笔记--(Ribbon)

Ribbon负载均衡 负载均衡策略懒加载 Ribbon-负载均衡策略 Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则: IRuleAbstractLoadBalancerRuleRetryRuleClientConfigEnabledRoundRobinRuleRoundRobinRuleRandomRuleBestAv…

【1419. 数青蛙】

来源:力扣(LeetCode) 描述: 给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrog…

windeployqt工具打包C++ QT项目

目录 前言方法TIP 前言 使用VS编写好QT项目后,有时需要发送给他人进行测试。在此情况下,发送所有项目文件显然不可取,因为exe文件不能独立运行,故在测试前需要先配置项目环境,以确保运行所需的库文件能够完全。 因此&…

PAT A1042 Shuffling Machine

1042 Shuffling Machine 分数 20 作者 CHEN, Yue 单位 浙江大学 Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid "inside jobs" where employees collab…

golang的os包用法简介

文章目录 简述os 包中的常用函数HostnameEnvironGetenvSetenvExitGetuidGetgidGetpidGetwdMkdirMkdirAllRemove os/exec 执行外部命令LookPath os/user 获取当前用户信息Current os/signal 信号处理NotifyStop 简述 Go语言的 os 包中提供了操作系统函数的接口,是一个…