1.delegate
//设置textField是否允许编辑
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField; // return NO to disallow editing.
//进入编辑状态
- (void)textFieldDidBeginEditing:(UITextField *)textField; // became first responder
//设置textField是否允许结束编辑
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField; // return YES to allow editing to stop and to resign first responder status. NO to disallow the editing session to end
//退出编辑状态(即便你设置了不允许结束编辑,在某些情况下也有可能退出编辑状态)
- (void)textFieldDidEndEditing:(UITextField *)textField; // may be called if forced even if shouldEndEditing returns NO (e.g. view removed from window) or endEditing:YES called
//监控是否改变当前输入的字符,yes为改变,no为默认不改变
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text
//在点击clear按钮的时候进入,询问是否清除。返回NO为忽视清除按钮,不清除。
- (BOOL)textFieldShouldClear:(UITextField *)textField; // called when clear button pressed. return NO to ignore (no notifications)
//点击键盘return按钮的时候,回调此方法,设为NO的时候会忽视return按钮的操作
- (BOOL)textFieldShouldReturn:(UITextField *)textField; // called when 'return' key pressed. return NO to ignore.
2.notification
//类似textFieldDidBeginEditing
UIKIT_EXTERNNSString *const UITextFieldTextDidBeginEditingNotification;
//类似textFieldDidEndEditing
UIKIT_EXTERNNSString *const UITextFieldTextDidEndEditingNotification;
//
UIKIT_EXTERNNSString *const UITextFieldTextDidChangeNotification;
-(void)viewWillAppear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notificationTextFieldValueChange:) name:UITextFieldTextDidChangeNotification object:txfEdit];
}
-(void)notificationTextFieldValueChange:(NSNotification *)notification
{
UITextField * textField = (UITextField *)txfEdit;
NSInteger kMaxLength = 12;
UITextRange * selectedRange = [textField markedTextRange];
QLLog(@"selectedRange:%@",selectedRange);
NSString * newText = [textField textInRange:selectedRange];
QLLog(@"newText:%@",newText);
NSString *toBeString = textField.text;
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式
if([lang isEqualToString:@"zh-Hans"]) { //简体中文输入,包括简体拼音,健体五笔,简体手写
//获取高亮部分
UITextPosition * position =[textField positionFromPosition:selectedRange.start offset:0];
if(!position) {
//没有高亮选择的字,则对已输入的文字进行字数统计和限制
if(toBeString.length > kMaxLength) {
textField.text = [toBeString substringToIndex:kMaxLength];
}
}else{
//有高亮选择的字符串,则暂不对文字进行统计和限制
}
}
//中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
else{
if(toBeString.length > kMaxLength) {
textField.text= [toBeString substringToIndex:kMaxLength];
}
}
}