在2个单独的文本字段中限制字符Swift 3

时间:2017-03-17 17:48:38

标签: swift uitextfield

在我的应用中,我有2个文本字段。 taskTextField和DescTextField。我想将任务文本字段的字符限制为15,将描述文本字段限制为20.我已设法限制两者但我不知道如何单独执行它们。这是我的代码:

let limitLength = 20

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    guard let text = textField.text else { return true }
    let newLength = text.characters.count + string.characters.count - range.length
    return newLength <= limitLength
}

任何有关如何为每个文本字段制定单独限制的帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

  1. 为每个UITextField添加标记:

    let taskTextFieldTag = 100
    let DescTextFieldTag = 101
    
    override func viewDidLoad() {
    
         // ..
    
         taskTextField.tag = taskTextFieldTag
         DescTextField.tag = DescTextFieldTag
    
         // ...
    }
    
  2. UITextFieldDelegate

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
        guard let text = textField.text else {
            return false
        }
    
        let newLength = text.utf16.count + string.utf16.count - range.length
    
        var maxLength = 0
    
        switch textField.tag {
        case taskTextFieldTag:
             maxLength = 15
        case DescTextFieldTag:
             maxLength = 20
        default: break
        }
    
        return newLength <= maxLength
    }
    

答案 1 :(得分:0)

基于您的代码,假设您可以通过IBOutlets将文本字段连接到您的代码

    @IBOutlet weak var taskTextField: UITextField!
    @IBOutlet weak var descTextField: UITextField!

    let taskTextFieldlimitLength = 15
    let descTextFieldlimitLength = 20

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        switch textField {
        case taskTextField:
            guard let text = textField.text else { return true }
            let newLength = text.characters.count + string.characters.count - range.length
            return newLength <= taskTextFieldlimitLength
        case descTextField:
            guard let text = textField.text else { return true }
            let newLength = text.characters.count + string.characters.count - range.length
            return newLength <= descTextFieldlimitLength
        default:
            return true
        }
    }
相关问题