Swift 3:显示 UITextField 中剩余的字符

use*_*197 2 uitextfield ios swift

我想知道如何显示 中剩余的字符UITextField

现在我通过以下方式限制字符:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if textField == TextFieldOne {
         guard let text = textField.text else { return true }
         let newLength = text.characters.count + string.characters.count - range.length
         return newLength <= 55
    }
    return true
 }
Run Code Online (Sandbox Code Playgroud)

我想做的是在您打字时UILabel开始倒计时。55

我正在考虑在 buy 中添加某种逻辑,textFieldDidChange我无法从该函数访问范围。

Dav*_*eek 5

你需要UITextFieldDelegate.

将委托设置viewDidLoadtextFieldOutlet。

然后你就可以使用这个shouldChangeCharactersInRange函数了。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        textField.delegate = self

        // here you set the start value 55 of your label
        label.text = String(55)
    }

}

extension ViewController: UITextFieldDelegate {

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        guard let text = textField.text else { return true }
        let length = text.characters.count + string.characters.count - range.length

        // create an Integer of 55 - the length of your TextField.text to count down
        let count = 55 - length

        // set the .text property of your UILabel to the live created String
        label.text =  String(count)

        // if you want to limit to 55 charakters
        // you need to return true and <= 55

        return length <= 55 // To just allow up to 55 characters
    }

}
Run Code Online (Sandbox Code Playgroud)