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的長度來限制的,你也可以根據自己的需求來設定限制的長度。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM