iOS限制文本输入长度进阶之 二

想在最后还能输入中文?

当然得找到,输入了拼音还没选择汉字的标记啦!

什么?你疑惑会没有标记?

的确我也有过这样的疑惑,因为找遍了UITextField,完全是没有头绪的

UITextField里没有,肯定就要找和它关联的啦

好了,不和你绕圈子了,直接揭晓

UITextField的UITextInput协议中有这么一个属性markedTextRange

@property (nonatomic, readonly) UITextRange *markedTextRange;                       //如果没有高亮文本则为nil  

上篇文章最终代码为3. 这里以此为基础进行优化,这里重复一次

3.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    if (range.location >= 10){
        return NO;
    }
    return YES;
}

目标:最后一个位置输入汉字可以突破限制

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    if (range.location >= 10 && (textField.markedTextRange == nil)){
        return NO;
    }
    return YES;
}

  的确可以超过限制了,可是却没发删除了,别着急,有办法,在添加一个判断逻辑

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    if (range.location >= 10 && (textField.markedTextRange == nil && range.length == 0)){
        return NO;
    }
    return YES;
}.length == 0,表示输入更多, .length == 1则表示删除

这样一来,问题又来了,当选择汉字时,字数可能就已经超过了最大字数,因此还需要增加一些逻辑

#define MAXNumber  10
 [self.field addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- (void)textFieldDidChange:(UITextField *)textField{
    if (textField.markedTextRange == nil) {
        if (textField.text.length > MAXNumber) {
            textField.text = [textField.text substringToIndex:MAXNumber];
        }
    }
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    if (range.location >= MAXNumber && (textField.markedTextRange == nil && range.length == 0)){
        return NO;
    }
    return YES;
}

自此,已经算是可以解决中文输入限制的问题了,说了这么多就最后这些才是最终的 ^_^ 更多的就需要自己解决了

时间: 2024-10-06 10:30:27

iOS限制文本输入长度进阶之 二的相关文章

iOS限制文本输入长度进阶之 一

/** * 本文以UITextField 最大文本长度=10为例 */ 首先想到的自然是delegate中的方法@selector(textField:shouldChangeCharactersInRange:replacementString:) 1.- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)stri

iOS(Swift) TextField限制输入文本的长度(不是字数)

最近做项目有一个特殊需求,就是需要限制一个TextField的输入文本的长度在一定范围内(注意,不是字数),上网查了一圈没有找到类似文章,这里把我的方法写进来,mark一下: 1.对TextField添加监听函数: textField.addTarget(self, action: "textFieldTextDidChange:", forControlEvents: UIControlEvents.EditingChanged) 2.在输入内容变化时进行处理: func textF

iOS 富文本格式字符 以及处理iOS8下textview设置富文本后输入bug

iOS的富文本设置,在iOS8下在textView的代理方法中设置textview的attributedText时,会出现富文本格式未加到text上的情况,可以在初始化时将文本属性赋给textview的typingAttributes.代码如下: NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineSpacing = 7;// 字体的行间距 UIF

简单几步实现 IOS UITextField输入长度的控制

在ios开发过程中,我们有时候需要对UITextField的输入长度进行控制,比如输入手机号码最大长度为11位等,而ios自身又不像android那样可以设置输入框的输入长度,接下来通过简单几步实现这个功能: 1.新建一个类继续UITextField比如这个类叫MyUITextField 2.声明一个变量用来记录输入的最大长度 3.添加一个事件用于监听输入框输入值的变化 4.通过判断当前text字符串的长度是否大于最大长度来截取字符串并赋值給当前text保证text字符串的值始为指指定的最大长度

iOS 中文输入长度控制

当使用拼音输入法时,该委托方法中的最后一个参数string接受的是输入的字母,而不是选择的汉字,造成的结果是,当想输入文字“我在编程”,输入拼音“wozaibiancheng”,每输入一个字母便会进入委托方法,统计的字符长度是字母的长度,实际上汉字还未超过限制长度,但是字母的长度超过了导致无法继续输入. 中文控制输入长度的方法如下: 1.注册notification [[NSNotificationCenter defaultCenter]addObserver:self selector:@s

iOS【textView或者textField文本输入字数限制】

[textView文本输入 字数限制] // 监听文本改变  触发时机(通过发送通知完成) -(void)textViewEditChanged:(NSNotification *)obj{ UITextView *textView = (UITextView *)obj.object; NSAttributedString *toBeString = textView.attributedText; //    NSLog(@" - -%@",[_contentView.textIn

设置警告框样式为带有两个文本输入的警告框,用于收集用户收货地址和联系电话。并选择合适的代理方法,当警告框上的两输入框有一个为空时限制“购买”按钮点击。

收集购物信息  iOS项目 倒计时:588 步骤 /.panel-heading 项目需求 设置警告框样式为带有两个文本输入的警告框,用于收集用户收货地址和联系电话.并选择合适的代理方法,当警告框上的两输入框有一个为空时限制“购买”按钮点击. #import "TableViewController.h" @interface TableViewController ()<UIAlertViewDelegate> @property (nonatomic, strong)

Cocos2d-x 3.4 之 文本输入之 EditBox

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 上一篇,说了 文本输入的 CCTextFieldTTF, 这次继续来弄文本输入,EditBox 做完CCTextFieldTTF以后,马上就搞这个EditBox了, 但是,改动有些多,而且好多BUG啊,网上资料也不多,整的我焦头烂额... 先发一些基础的,具体其

限制 UITextField 输入长度

限制 UITextField 输入长度 标签(空格分隔): UITextField UITextField 是 iOS 中最常用的组件之一.关于它也有各种各样的需求,这些需求是它本身没有提供相应的API的.限制输入框文本长度是常见的需求,UITextField 本身也并没有为此提供API.本文尝试给其加入这个功能. 1.通过 delegate 来实现 限制 UITextField 的输入字数,首先想到的是 UITextFieldDelegate,通过实现这个协议来实现需求: - (BOOL)te