import "ViewController.h"
//第二个设置协议的位置 在类的延展中!!!
@interface ViewController ()<UITextFieldDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//创建输入框
UITextField * textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 50, 395, 40)];
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.placeholder = @"请输入...";
//关键 遵循协议后就要设置代理对象
//self是控制器对象 ViewController 调用本方法的对象 本类对象才能调用本类的减号方法,只有控制器成为代理对象 才有权利在此实现代理方法
textField.delegate = self;
[self.view addSubview:textField];
}
pragma Mark --UITextFieldDelegate Methods ---
//1.方法询问代理对象是否允许进入编辑状态
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
NSLog(@"%s",FUNCTION);
return YES;
}
//2已经进入编辑状态
-(void)textFieldDidBeginEditing:(UITextField *)textField{
textField.backgroundColor = [UIColor greenColor];
NSLog(@"已经进入编辑状态%s",__FUNCTION__);
}
//3 询问代理对象是否允许结束编辑
-(BOOL)textFieldShouldEndEditing:(UITextField *)textField{
return YES;
}
//4. 完成编辑时的代理方法
-(void)textFieldDidEndEditing:(UITextField *)textField{
textField.backgroundColor = [UIColor redColor];
NSLog(@"完成编辑");
NSLog(@"%s",FUNCTION);
}
//5 . 替换已有字符串的方法
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSLog(@"输出替换信息");
NSLog(@"tange= %@",NSStringFromRange(range));
//函数NSStringFromRange 将结构体range变为NSString 对象类型(很强大)
return YES;
}
//6 询问代理对象是否允许清空已有文本内容
-(BOOL)textFieldShouldClear:(UITextField *)textField{
//其实没有清空 只是问问能不能
NSLog(@"%s",FUNCTION);
return YES;
}
//7.询问代理对象是否返回,那其实就是点击return 就会自动调用此方法
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
//释放第一响应者!!!注意代理方法中所有textField 参数都指代发出协议的对象(也就是 我们自己创建的textField)
[textField resignFirstResponder];
return YES;
}