標籤:
最近做項目有一個特殊需求,就是需要限制一個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的長度來限制的,你也可以根據自己的需求來設定限制的長度。
iOS(Swift) TextField限制輸入文本的長度(不是字數)