iOS-完美解决系统键盘联想输入时,字数限制失效问题

1.首先定义一个属性变量

///字数限制
@property(nonatomic,assign)NSInteger countLimit;
///输入框
@property(nonatomic,strong)UITextField *tf;  

2.在初始化监听UITextField的输入变化通知。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFiledEditChanged:)
                                                 name:@"UITextFieldTextDidChangeNotification"
                                               object:self.tf];
                                               

3.接收通知的时候,对系统键盘联想输入,高亮选中的字体进行字数限制。

- (void)textFiledEditChanged:(NSNotification *)aNotifi
{
    if (aNotifi.object == self.tf) {
        UITextField *textField = self.tf;
        UITextRange *selectedRange = [textField markedTextRange];
        NSString *newText = [textField textInRange:selectedRange];
        if (!newText.length) {
            if (self.tf.text.length > self.countLimit) {
                self.tf.text = [self.tf.text substringToIndex:self.countLimit];
            }
            //下面代码是字数显示,显示格式如:5/20;
            _lbCount1.text = @""[@(self.tf.text.length)][@"/"][@""[@(self.countLimit)]];
        }
    }
}

4.遵守UITextField的代理方法

#pragma mark - UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    if (textField == _tf) {
        //限制
        if ([string isEqualToString:@" "]) {
            return NO;
        }
        
        //最多输入位数限制
        if (self.countLimit) {
            UITextRange *selectedRange = [textField markedTextRange];
            NSString *selectedText = [textField textInRange:selectedRange];
            NSInteger count = textField.text.length;
            if (selectedText.length) {
                count = textField.text.length - selectedText.length;
            }
            if (count >= self.countLimit && ![string isEqualToString:@""]) {
                return NO;
            }
        }
        
    }
    return YES;
}

点赞的你,真帅。

Guess you like

Origin blog.csdn.net/samuelandkevin/article/details/103835638