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

本文详细介绍如何在SwiftUI中实现字数限制功能,包括定义属性变量、监听UITextField输入变化、处理系统键盘联想输入和高亮选中字体的字数限制,以及遵守UITextField的代理方法。

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;
}

点赞的你,真帅。

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值