UIStoryboard
- 父类是NSObject
- 没有成员变量,只有类创建方法
+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(nullable NSBundle *)storyboardBundleOrNil;
- Storyboard是重量级的,一般开发中由于多人开发使用Storyboard容易冲突,多用轻量级的xib
storyboard文件的认识
- 作用:描述软件界面
- 程序启动的简单过程
- 程序一启动,就会加载
Main.storyboard
文件 - 会创建箭头所指的控制器,并且显示控制器所管理的软件界面
- 程序一启动,就会加载
-
配置程序一启动就会加载的storyboard文件
storyboard创建的控制器
- 现在创建的控制器都不能处理事件,如果需要处理事件,需要自定义控制器。
- 原因:当通过storyboard创建控制器对象,默认都是系统自带的控制器对象,系统自带的是不能处理事件的。他不能写监听方法
- 如果要让控制器能处理事件,需要自定义控制器,并设置storyboard中custom class类型。
系统加载指定storyboard的流程
- 程序启动完成时,会判断主界面是否设置了main storyboard,如果有,就会加载storyboard,自动创建好窗口和根控制器。
如果设置的不是main storyboard,而是我们创建的其他storyboard,就会加载我们创建的。(如果没能成功,需要清除缓存)
如果没有设置,就会根据对应的代码创建对应的storyboard及其描述的控制器。必须要有storyboard,创建UIStoryboard对象才有意义,alloc init创建UIStoryboard对象没有意义
// 1.根据storyboard名称和地址创建storyboard,并创建描述的控制器
// Name:storyboard文件名
// nil = [NSBundle mainBundle]
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
// 2.根据标识符加载描述的控制器(已创建storyboard)
// 标识不能乱传,必须storyboard有这个标识,否则报错
// UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"vc1"];;
// 3.加载箭头指向的控制器(已创建storyboard)
// instantiateInitialViewController:
UIViewController *vc = [storyboard instantiateInitialViewController];
在storyboard中实现文字内容换行
- 如何让storyboard\xib中的文字内容换行
- 快捷键: option + 回车键
- 在storyboard\xib输入\n是无法实现换行的
- 在代码中输入\n是可以实现换行的
self.label.text = @"534534534\n5345345\n5345";
在storyboard\xib中给UIScrollView子控件添加约束
- 给添加一个UIView类型的子控件A(这将是UIScrollView唯一的一个子控件)
- 设置A距离UIScrollView上下左右间距都为0
- 往A中再添加其他子控件
- 上下滚动(垂直滚动)
- 设置A的高度(这个高度就是UIScrollView的内容高度: contentSize.height)
- 设置A在UIScrollView中左右居中(水平居中)
- 左右滚动(水平滚动)
- 设置A的宽度(这个宽度就是UIScrollView的内容宽度: contentSize.width)
- 设置A在UIScrollView中上下居中(垂直居中)
- 上下左右滚动(水平垂直滚动)
- 设置A的宽度(这个宽度就是UIScrollView的内容宽度: contentSize.width)
- 设置A的高度(这个高度就是UIScrollView的内容高度: contentSize.height)
在xib\storyboard中使用KVC示例
多storyboard文件共同开发
开发中往往存在多个控制器,如果都在storyboard中拖控制器会使得管理非常复杂,而且界面混乱,非常不清晰。
-
可以通过xcode-editor-refactor to storyboard将多个控制器抽离成多个不同的storyboard文件,使用见下图
-
效果图
虽然可以这样操作,使storyboard结构变得清晰,但是依然不可以这样操作。建议多用xib + 代码方式开发