iOS开发UI篇—实现一个私人通讯录小应用(二):http://www.cnblogs.com/wendingding/p/3777087.html
一、实现功能说明
(1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作。
注意:注销按钮的单击事件已经进行了连线。实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex需要遵守UIActionSheetDelegate协议。
(2)当两个文本框的状态发生改变时,通知添加按钮变为可用状态。
知识点:通知(注册监听)
(3)小细节:从ContactsList -- 》Add页面的时候,我们的焦点应该直接放在UITextFiled中,用户体验较好。但需要注意是ADDView先出来,键盘再出来所以代码应该放在
57 - (void)viewDidAppear:(BOOL)animated 58 { 59 // 3.主动召唤出键盘 60 [self.nameFeild becomeFirstResponder]; 61 // [self.nameField resignFirstResponder]; 62 }
(4)数据的逆传(使用代理)
通过上述我们可以知道代理就是对象A监听对象B,A一般是控制器,B一般是控件(当然也可能是控制器)。
实现代理的三个步骤:
1、设置代理:设置监听对象A为代理B.delegate = self(A);
2、遵守协议:遵守的是被监听对象B的协议,所以协议是定义在对象B中的。在对象A中引入代理
3、实现协议方法:在对象A中实现协议中的方法
自定义代理:
ContactViewController作为AddViewController的代理
1、首先在AddViewController中定义一个协议,协议中定义一个需要代理对象需要实现的方法(这里是C-C的,为了传递数据,所以方法中应该有参数用来传递数据),
同时还应该在AddViewController中定义一个属性delegate
2、在ContactViewController中的btnClick的方法中(实际是从Contact--Add 的方法中),在页面跳转之前设置代理,addVc.delegate = self;(别忘了遵守协议!)
3、在AddViewController中addBtn的方法中,在出栈的同时通知代理调用代理方法
//如果代理方法存在就通知代理调用该方法,传递数据
79 if ([self.delegate respondsToSelector:@selector(addViewControllerDidAddBtn:contatc:)]) {
80 NSLog(@"sadafaf");
81 [self.delegate addViewControllerDidAddBtn:self contatc:info];
82 }
比如AddContacts
//2.数据逆传(把当前控制器view的数据传递到上一个控制器的view中)
77 //使用代理,自定义一个代理,并使用代理传递数据
78 //如果代理方法存在就通知代理调用该方法,传递数据
79 if ([self.delegate respondsToSelector:@selector(addViewControllerDidAddBtn:contatc:)]) {
80 NSLog(@"sadafaf");
81 [self.delegate addViewControllerDidAddBtn:self contatc:info];
82