UITextView 限制字符数和剩余显示数

UITextView limit characters and display count left

我正在尝试将 UITextView 的字符限制为 200 个。它从 Firebase 数据库(如果可用的话)获取数据,如果没有 - 表示剩余字符的 UILabel 应该被隐藏 - 因此,如果有数据(文本字段中的文本,它应该用左字符显示 UILabel

我确保将我的 UIViewController 作为 UITextViewDelegate 的委托,并且我还设置了 IBOutlet weak var descriptionTextView: TextViewX!(TextViewX 是 UITextView 的子类) 并在 viewDidLoad() 方法中设置 descriptionTextView.delegate = self。一旦您开始在文本视图中键入内容,标签计数就不会更新或根本不会显示。

此外,我还想在检测到剩余字符少于 30 个时,将 UILabel 的颜色从绿色更改为红色。

这是我的代码,但它不起作用。剩下的字符根本没有显示:

func textView(_ textView: TextViewX, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool
{
    let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
    let numberOfChars = newText.characters.count
    return numberOfChars < 200
}

func textViewDidChange(textView: TextViewX)
{
    let currentCharacterCount = 200 - textView.text.characters.count

    if currentCharacterCount >= 30 {
        descriptionCharacterCountLabel.text = "\(200 - textView.text.characters.count)"
    }
    else
    {
        descriptionCharacterCountLabel.textColor = UIColor.red
        descriptionCharacterCountLabel.text = "\(200 - textView.text.characters.count)"
    }
}

如果您仔细查看 UITextViewDelegate 的文档,您会发现 textViewDidChange 的定义如下:

optional func textViewDidChange(_ textView: UITextView)

看参数!它需要一个外部参数名称为 _!

的参数

看看你写了什么:

func textViewDidChange(textView: TextViewX)

您的参数的外部名称是 textView!

这就是它不起作用的原因。

所以,只需要在textView前加上_和一个space,并将参数类型改为UITextView