对textfield的代理方法做一总结:
第一继承自UIControl
添加事件
[textField addTarget : self action : @selector (didDone:) forControlEvents :UIControlEventEditingDidEndOnExit ];
触发方法的事件是个枚举值,可以自己研究。首先是判断是否开始编辑,返回值是YES则可编辑,NO则不能编辑。
//进入编辑状态的检查,返回值为NO则无法编辑
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
NSLog(@"应该开始编辑?--%s",__FUNCTION__);
return YES;
}
进入编辑状态时,经过此方法:
//进入编辑状态
-(void)textFieldDidBeginEditing:(UITextField *)textField{
NSLog(@"开始编辑--%s",__FUNCTION__);
}
每次输入,就走一次这个方法:
//问委托指定的文本是否应该被改变。是的如果指定的文本范围应该更换,否则,没有保持旧的文本。
/**
* 审查每次输入的内容
*
* @param textField 第一响应的文本框
* @param range 传进来的长度始终为0
* @param string 每次输入的内容
*
* @return yes:显示 no:不显示
*/
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
// NSLog(@"检测输入--%s",__FUNCTION__);
/*range = NSMakeRange(0, 5);
if ([textField.text length] > 5) {
string = [textField.text substringWithRange:range];
}*/
/*NSLog(@"%@",textField);
NSLog(@"range--%lu",range.length);
NSLog(@"string--%@",string);*/
return YES;
}
其中的代码是一些调试代码,用来查看参数是什么,以及什么时候执行内容
判断是否结束输入,返回值为YES则可以结束,否则不能结束:
//是否结束编辑
-(BOOL)textFieldShouldEndEditing:(UITextField *)textField{
NSLog(@"是否结束编辑--%s",__FUNCTION__);
return YES;
}
已经结束编辑是进入此方法:
//结束编辑
-(void)textFieldDidEndEditing:(UITextField *)textField{
NSLog(@"结束编辑--%s",__FUNCTION__);
}
按回车键时进入此方法:
//回车键
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
NSLog(@"回车键按下--%s",__FUNCTION__);
BOOL temp = [textField resignFirstResponder];
NSLog(@"%d",temp);
return YES;
}
按清除键进入?
//问委托如果文本字段的当前内容应该删除。
-(BOOL)textFieldShouldClear:(UITextField *)textField{
NSLog(@"是否清除--%s",__FUNCTION__);
return NO;
}
这个我尝试了按回退键,应该是清除键,但是不起作用,改变返回值也没有什么效果,还请大神指点,这个方法到底是干什么的?