导航条
- 导航条的内容由栈顶控制器的navigationItem属性决定,而不是由父控制器决定。
- 以后只要看到Item,一般都是苹果提供的模型,不能直接更改模型对应的控件,否则将会变得很乱。而模型提供了几个接口,可以让开发者自定义,定制自己的导航条。
- UINavigationItem、UIBarButtonItem
- MVC思想:不把控件展示给用户;更改模型数据,然后在控件上面展示。
控制器view的生命周期
-
附上图片
viewWillUnload、viewDidUnload。view销毁时,由系统自动去管理调用上面的方法。
通讯录
- 学习目的
- 1.控制器的跳转
- 2.控制器之间传值
- 3.数据存储
- 项目框架:导航控制器,始终贯穿着子控制器。
- 界面个数:4个。
- 判断UITextField中text是否有值的时候,不要这样写:text == "" 或者 text == nil,应该判断text.length == 0
- 编写登录界面
- 搭建界面
- 实现业务逻辑
- 实现登录功能
segue
- storyboard上每一根用来跳转的线,都是一个UIStoryboardSegue对象
- 3个属性
- identifier
- sourceViewController
- destinationViewController
- 自动型segue,直接由控件 ——> 目标控制器,不需要做任何判断
- 手动型segue,需要作出判断
- 1.脱线:来源控制器 ——> 目标控制器
- 2.设置标识符 identifier
- 3.perform 方法执行segue
第三方框架HUD
- MBProcessHUD:类似于QQ登录切换时候中间过渡的界面
- 使用方便,包含动画,提高了用户体验
- 几个方法:
- showError:
- showMessage:
- hideHUD:
数据传递
数据顺传
- 数据传递,就好比买卖双方,一方需要,一方拥有,然后将商品传递
- 跳转函数:performSegueWithIdentifer:
- 跳转前的准备函数:prepareForSegue:。做一些数据传递的工作
- 步骤:
- 1.performSegueWithIdentifer:
- 2.创建UIStoryboardSegue
- 3.设置sourceViewController
- 4.设置destinationViewController
- 5.执行prepareForSegue:,做些准备工作,进行传值。
- 6.[segue perform]
- 7.判断segue的类型,如果是push,拿到导航控制器并push
数据逆传
- 不能按照数据顺传的方式,进行逆传,因为目标控制器拿不到segue ——> 造成了目标控制器拿不到来源控制器 ——> 不能像数据顺传的方式进行。
- 需要在目标控制器中声明sourceViewController对象,然后在sourceViewController传值的prepareForSegue:中,将self 赋给目标控制器中的sourceViewController对象。
- 这样在目标控制器中就拥有了sourceViewController对象,进行数据的传递。
代码解耦
- 上面的解决方法耦合性比较强,文件类之间相互包含,谁也离不开谁,可以使用代理方法去解耦。
- 通过代理拿到接收方。接收方想要发送方的数据,监听发送方发生的变化,故需要设置发送方的代理为接收方。
- 在接收方中,因为有segue对象,可以获取到发送方对象,然后设置发送方的代理为自身,并实现发送方代理的方法。
tips
- 进入编辑条目的时候,自动将鼠标定位至第一个要输入的UITextFied,并弹出键盘,提高用户体验。[textField becomeFirstField];
- 项目分组:附上图
- 表格最好在数据没有的时候不需要分割线,有数据的时候cell有分割线,故需要手动将多余的分割线去掉。
[self.tableView.tableFooterView = [[UIView alloc] init];