OC 3大回调模式使用总结(二)委托模式回调
1.委托模式回调
主要用于 UITableView(UITableViewController),UICollectionView,UIPickerView,UITextField,UITextField
这几类控件,是使用委托模式封装的,使用方法和按钮类的控件不一样
委托模式,实际上也是一种对自身状态的汇报机制,某个状态或者事件的变化是不确定时间发生的,但是发生的时候就就得有某些应对措施,这些应对措施是提前写在协议中的;
与目标动作回调不同的是,委托模式的控件在使用时需要指定委托人和协议,这样状态改变时就可以汇报给委托人来解决,委托人此时不可以自定义委托方法,只能按照协议中的方法去对它的状态改变进行处理,这样使用协议约束之后保障了参数和方法名的统一性,从而减少了安全威胁,而且委托回调的协议方法一般来说有很多个,而目标动作的方法默认是只有一个
2.委托模式与代理的区别:
委托与代理,实际上是从不同侧面去描述一个事件过程 ,我委托一个律师给我打官司,那么对于我来说是委托,对于律师来说是代理,是相对的说法
3.委托模式的缺点:
(1)当你自定义的组件有多个相同类型时,他们的状态改变时会调用同一个方法,不好区分,独立性不好;
(2)过程较为繁琐,需要设置委托,实现协议
4.委托模式的应用:
现在越来越多的控件或者组件使用block来实现,所以默认情况下我们只需要掌握上述的系统几种委托模式的控件的使用即可;自定义控件现在一般采用block封装
5.委托模式控件使用步骤:
(1)分配内存,配置一些选项 (2)设置委托人,具体做法: xxx.delegate = self;(此过程要在分配内存之后) (3)遵守协议,把控件对应的协议遵守 ,使用 <UITextFieldDelegate>在 .h中声明 (4)根据代码提示打出委托方法,或者查看协议的官方文档(cmd+单击),找出你需要的方法,实现相应的代码,实现代码后该控件不同的状态你就可以检测到了 (5)添加到父视图
UITextField单行文本框使用示例:
1).创建一个输入框属性
#import "ViewController.h" @interface ViewController () @property(strong,nonatomic)UITextField *txf2;//密码输入框 @end
//2.配置输入框
self.txf2 = [[UITextField alloc]init]; self.txf2.frame = CGRectMake(50, 100, 200, 30); self.txf2.text = @"密码是英文和数字的组合"; self.txf2.textColor = [UIColor lightGrayColor]; self.txf2.delegate = self; //***关键步骤1,设置委托人,需要在分配内存之后 self.txf2.borderStyle = UITextBorderStyleRoundedRect; self.txf2.secureTextEntry = YES;//设置为密码框 [self.view addSubview:self.txf2];
//3.遵守协议,可以在.h中遵守,也可以在延展中
#import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITextFieldDelegate> //***第2步,实现协议 @end
//4.根据自己的需求实现UITextFieldDelegate协议里的方法,来处理不同的输入状态
#pragma mark - textFiled的委托方法,当用户输入时自动会调用
/**点击输入框是否应该开始编辑
*/
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { //如果reurn NO键盘不会弹出 textField.text = @""; textField.textColor = [UIColor blackColor]; return YES;//代表可以开始编辑 }
//在文本框编辑完成之后自动调用
- (void)textFieldDidEndEditing:(UITextField *)textField { NSLog(@"文本是 : %@",textField.text); }
//点击返回时该干什么 - (BOOL)textFieldShouldReturn:(UITextField *)textField { //点击完成按钮是否应该返回 [textField resignFirstResponder];//释放键盘 return YES; }
其他OC教程:http://blog.csdn.net/yangbingbinga/article/category/2437601