UITextField
是我们经常使用的输入视图控件,当我们把它用在作为一个搜索框使用时,可能会有带逐字联想的功能,这个时候我们就需要监听着 UITextField
的一举一动。
使用代理 UITextFieldDelegate
, UITextFieldDelegate
提供了一个可以监听文本内容变化的委托方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
但是,方法返回的三个参数分别是:
1、还没有加入输入变化前的 textField
,所以能够访问到的也只有编辑前的文本内容;
2、文本变化的节点位置和个数;
3、变化的字符串内容,可能是新增也可能是删除的。
可是,只访问到编辑前的数据是不具有同步性的,而逐字联想需要的是当前 UITextField
的文本内容,这个时候我们就需要用到 NSString
的一个方法:
/* 用指定的字符串替换范围中的字符,返回新的字符串。*/
- (NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement;
来得到具有同步性的文本内容。
在 UITextFieldDelegate
的具体代码:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *strContent = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSLog(@"当前输入内容:%@", strContent);
return YES;
}
strContent
就是逐字联想需要的文本参数。