目标 - 打招呼应用
应用界面:
界面与代码分离
- 可以只用代码来描绘界面及响应用户操作
- 但是
- 不直观
- 调整麻烦
- iOS的解决方案:
- 用Interface Builder 画界面
- 保存到xib(xml版的nib)文件
- 用代码更新界面、响应用户操作
- 保存在.m文件里
ib
: Interface Builder,90年代初由NeXT创作
带来的两个小麻烦
界面操作怎么指定响应代码?
代码怎么引用界面元素?
解决方案 - Outlet
-
为了让代码能引用nib中的对象
- 需要代码里有一个变量来引用界面对象
- 在界面对象创建后,给这个变量赋值
- 这个过程最好能自动完成
-
Outlet
- IBOutlet 标记的变量
Connection
Nib Object 通过 Connection 与Outlet(Referencing outlet)建立联系
Outlet Connection 建立的过程
Action Connection
- 界面事件
- Interface Builder, Connection Inspector
- 响应代码
- IBAction 标记的方法
- 关联:界面对象.事件 => 类实例.方法
eventType: 响应的事件类型
touchUpInside: 事件类型,(手指)按下后在当前view响应范围内抬起
touchUpOutside: 事件类型,(手指)按下后在当前view响应范围外抬起
selector: target的事件响应方法
IBAction告诉编译器方法为IBAction对象,具体返回类型实际上相当于void
在Xcode中关联界面元素与代码
- 打开Assistant Editor
- 确保两边打开的文件正确
- 使用鼠标右键或按住control键从界面元素拖向代码中相应位置
- 或在Interface Builder的Connection Inspector中从响应事件的小圆点拖向代码中相应位置
- 或从代码左侧(需手写代码)的小圆点拖向对应组件
组件一般使用weak
空心小圆圈说明没有正确关联
注意要删除多余的connection
UIbutton 样式
代码创建 UIButton
//创建
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
//定制
[button setBackgroundImage:[UIImage imageNamed:@"okbtn"] forState:UIControlStateNormal];
[button setTitle:@"OK" forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
//添加响应
[button addTarget:self action:@selector(greeting:) forControlEvents:UIControlEventTouchUpInside];
// - event mask: UIControlEventTouchUpInside | UIControlEventTouchUpOutside