连线
目标
-
连线前准备
- 界面绑定代码文件
- 界面仅仅只是用来显示,那么如果想写代码必须写在代码文件中。
- 并且代码只能写在跟这个界面所绑定的代码文件中
- 因为所有界面内容都在ViewController里面,所以要点黄色的“小铜钱”给这个ViewController绑定一个代码文件,绑定好后就可以把代码和连线弄在这个代码文件里了
-
连线的目的
- 通过连线才能够访问 Interface Builder 中控件的属性和方法
- 要访问 Interface Builder 中控件的属性,需要连接
IBOutlet
- 如果要监听 Interface Builder 中控件的事件,需要连接
IBAction
IBOutlet
可以连接到私有扩展中IBAction
可以连接到实现中IB
就是Interface Builder
的缩写
-
掌握几种连线的方式
- Interface Builder 到源代码
-
常见连线错误
连线演练
简单的加法计算器代码实现
@interface GLMainViewController ()
@property (weak, nonatomic) IBOutlet UITextField *num1Text;
@property (weak, nonatomic) IBOutlet UITextField *num2Text;
@property (weak, nonatomic) IBOutlet UILabel *resultLabel;
@end
@implementation GLMainViewController
/// 计算结果
- (IBAction)calculate {
// 1. 获取界面结果数值
NSInteger num1 = _num1Text.text.integerValue;
NSInteger num2 = _num2Text.text.integerValue;
// 2. 计算结果
NSInteger result = num1 + num2;
// 3. 设置结果
_resultLabel.text = @(result).description;
}
@end
常见连线错误
-
连线出现的愿意
- 错将方法连接成了属性,又删除了
- 连接完属性或者方法后改名了
- ……
-
如果连线错误运行程序时,程序会崩溃在
main.m
,并且提示以下信息:
* Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key num3Text.'
翻译
由于
NSUnknownKeyException(未知的键值异常)
导致应用程序终止,CZMainViewController
这个类没有num3Text
键
- 代码中检查连线情
- Interface Builder 中检查连线情况
解决连线的重要技巧
连线完成后,立即 cmd + r 执行程序,不要等到写了很多代码之后再运行!
Storyboard 的简单使用
目标
- 区分 storyboard(故事板) 和 scene(场景)
- 设置类前缀
- 界面与程序的关联关系的建立
术语:
Interface Builder
在早期版本的 iOS 开发包中,拖拽界面是一个完全独立的应用程序,叫做
Interface Builder
从 Xcode 4.0 开始 Interface Builder 和 Xcode 整合在了一起,不过一直到今天还有很多招聘需求上会要求精通 Interface Builder
Storyboard 界面概览
常用技巧
- 程序入口箭头可以拖拽
- 如果没有指定程序入口,会提示以下错误:
Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?
翻译:
为 'Main' Storyboard 文件实例化默认视图控制器失败,可能没有设置指定的入口
- 选中控件,Option 拖拽可以复制一个新的控件
按钮
和标签
,选择菜单Editor
Size to Fit Content
,可以根据内容自动调整大小快捷键是
cmd + =
Storyboard 和程序文件之间的关系
设置类前缀
提示:使用 OC 开发时,已定注意使用类前缀,并且建议使用三个大写字母,以防止和其他的框架冲突!
- 新建
CZMainViewController
继承自UIViewController
- 在
viewDidLoad
方法增加断点,测试界面与程序的关联关系