UITextField和UITextView精确获取输入的每一个字符

  对于UITextFieldUITextView来说很多东西都可以通过代理来解决,但是在处理问题的时候往往会更加精准的定位,比如仅仅只能输入多少个字之类的判断,则在代理方法中就会有局限,因为键盘可以输入多个后才返给代理的回调,这样导致在键盘上已经输入了很多,但是实际回调的时候往往会少很多,导致用户输入的内容过多而浪费,原来用通知去解决这个问题,通知确实可以完美的解决这个问题,但是每次都要在dealloc内写入移除的代码反而觉得累赘了,后来发现了一个方法,这里特意收藏一下.
  在UITextFieldUITextView实例化完后加入如下方法,就跟UIButton一样写一个监听,就可以实现,很简单吧,具体的原因去谷歌一下为什么,我在这里就不多陈述了.

[tfXxx addTarget:self action:@selector(textFieldEditChanged:) forControlEvents:UIControlEventEditingChanged];

//实现下面的方法,来达到监听的作用

- (void)textFieldEditChanged:(UITextField *)textField{
 NSLog(@"输入的内容: %@",textField.text);
}

  附上原来实现的方法,其实道理都是一个,只是监听方式不同一个用的 selector 一个用的是 Notification.

[[NSNotificationCenter defaultCenter]addObserver:self 
                                        selector:@selector(textFieldEditChanged:)
                                            name:UITextFieldTextDidChangeNotification
                                          object:self.tfXxx];

  关于UITextView,道理是一样的将name的参数换为UITextViewTextDidChangeNotification即可.

    //回调
-(void)textFieldEditChanged:(NSNotification *)obj{
BOOL isTextFiledTextCount = NO;
UITextView *textView = (UITextView *)obj.object;
NSString *toBeString = textView.text;
UITextRange *selectedRange = [textView markedTextRange];
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
if (!position) {
    if (toBeString.length > 15) {
        self.titleText.text = [toBeString substringToIndex:15];
        isTextFiledTextCount = YES;
    }
    if (isTextFiledTextCount==YES) {
        UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"最多输入15个汉字" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alert show];
        isTextFiledTextCount = NO;
    }
}

}

  本质是监听UIControlEventEditingChanged这一个类型的枚举

你可能感兴趣的:(UITextField和UITextView精确获取输入的每一个字符)