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

最近做项目有一个特殊需求,就是需要限制一个TextField的输入文本的长度在一定范围内(注意,不是字数),上网查了一圈没有找到类似文章,这里把我的方法写进来,mark一下:

1、对TextField添加监听函数:

textField.addTarget(self, action: "textFieldTextDidChange:", forControlEvents: UIControlEvents.EditingChanged)

2、在输入内容变化时进行处理:

func textFieldTextDidChange(textField:UITextField) {
    if let _ = textField.text {
        if let positionRange = textField.markedTextRange {
            if let _ = textField.positionFromPosition(positionRange.start, offset: 0) {
                //正在使用拼音,不进行校验
            } else {
                //不在使用拼音,进行校验
                self.checkTextFieldLengthAndModify(textField)
            }
        } else {
            //不在使用拼音,进行校验
            self.checkTextFieldLengthAndModify(textField)
        }
    }
}

3、实现校验方法

//检查输入框的文字是否超长,如果超出长度则做截短
func checkTextFieldLengthAndModify(textField:UITextField) {
    if let text = textField.text {
        if self.checkTextFielLength(textField, str: text) {
            //长度正常,不处理
        } else {
            //超出长度,开始处理
            self.view.makeToastCenter("输入文字过长")

            let len = text.length
            let txt = text as NSString
            if len > 0 {
                //进行截短,看是否超长,如果不超长,则继续截短,直到不超长为止
                //Exp:
                //apple
                //appl
                //app
                for var i = len-1; i >= 0; i-- {
                    let txt_s = txt.substringToIndex(i)
                    //print("txt_s : \(txt_s)")
                    if self.checkTextFielLength(textField, str: txt_s) {
                        //就截取到这了
                        textField.text = txt_s
                        break
                    } else {
                        //继续截取
                    }
                }
            }
        }
    }
}

4、实现checkTextFielLength,判断文字是否超出输入框长度

func checkTextFielLength(textField: UITextField, str: NSString) -> Bool {
    let rect = str.boundingRectWithSize(CGSizeMake(CGFloat(MAXFLOAT), CGFloat(MAXFLOAT)), options: .UsesLineFragmentOrigin, attributes: textField.defaultTextAttributes, context: nil)
    if rect.width > textField.width {
        return false
    } else {
        return true
    }
}

这里的长度限制是根据UITextField的长度来限制的,你也可以根据自己的需求来设定限制的长度。

时间: 2024-08-11 09:52:00

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

iOS 设置textfield的最大文本长度

//在现实开发中  需要控制文本输入长度 并实时做短信验证,代码如下 [self.textField addTarget:self action:@selector(codeChange:) forControlEvents:UIControlEventEditingChanged]; - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:

ios设置textField只能输入数字用于电话号码

首先在.xib中将UITextField的Keyboard设置为Number Pad,但是使用时键盘会切回别的键盘无法对内容进行校验.通过神奇的百度我知道了通过以下方法可以解决这样的问题: 首先让.xib的viewController实现UITextFieldDelegate然后和想要校验的控件关联. 以上是xib,如果是代码设置的 就不要考虑还是那个面部分 然后将下列代码粘贴到类中即可. - (BOOL)textField:(UITextField *)textField shouldChan

IOS - 获取UITextField的输入文本

当UITextField文本改变时, 依据内容更新数据, 通过写监听事件就可以. 加入监听: [timesField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; // 监听事件 监听事件: // 监听改变button - (void) textFieldDidChange:(UITextField*) sender { // 文本内容 NS

iOS对textField进行字符长度限制的办法

在项目开发过程中,遇到这么一个需求,编辑标签时,输入的最大长度需要限制为24个字节. 查阅了一些材料,并参考了之前项目的相关处理办法,今天在这里总结一下解决方案. 1.添加对UITextField的编辑变化事件的监听: [self.textField addTarget:self action:@selector(textLengthChange:) forControlEvents:UIControlEventEditingChanged]; 2.实现对应的action: -(void)tex

更改IOS于UISearchBar撤消button底、搜索输入文本框背景中的内容和UISearchBar底

转载请标明出处:http://blog.csdn.net/android_ls/article/details/39993433 測试的手机IOS系统版本为:6.1.3,实现过程例如以下: 1.加入UISearchBar到父View _searchBar = [[UISearchBar alloc]init]; _searchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, kSeachBarH); _searchBar.autor

修改IOS中UISearchBar的取消按钮背景、搜索内容输入文本框背景和UISearchBar的背景

转载请标明出处:http://blog.csdn.net/android_ls/article/details/39993433 测试的手机IOS系统版本号为:6.1.3,实现步骤如下: 1.添加UISearchBar到父View _searchBar = [[UISearchBar alloc]init]; _searchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, kSeachBarH); _searchBar.autore

iOS之自动调节输入文本框的高度

//自动调节输入文本框的高度 - (void)textViewDidChange:(UITableView *)textView{ float height; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { CGRect textFrame = [[self.textView layoutManager] usedRectForTextContainer:[self.textView textContainer]

JS(javascript)动态判断输入文本框剩余可输入字符数

一.描述 我们在空间中发表状态,当我们输入一个字符,上面的剩余可输入字符数就会减一,直到输入的字符数达到之前设定的最大数量为止,效果如下图所示: 二.实现方法 首先,我们先确定文本框内的最大可输入长度,其次在输入一个字符抬起键盘的时候对输入文本框中的字符长度进行验证,并在动态显示在剩余可输入字符数中. 三.源代码 <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="

iOS系列 基础篇 08 文本与键盘

iOS系列 基础篇 08 文本与键盘 目录: 1. 扯扯犊子 2. TextField 3. TextView 4. 键盘的打开和关闭 5. 打开/关闭键盘的通知 6. 键盘的种类 7. 最后再扯两句 1. 扯扯犊子 与Label一样,TextField和TextView也是文本类控件,是可以编辑文本内容的. 在控件内容编辑方面,三者都可以通过代码.双击该控件和属性检查器中的Text属性来实现,但是TextField和TextView比Label多了一个键盘的使用. 另外,TextField和T