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

标签 ios swift uitextview uitextviewdelegate

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

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

此外,我还想在检测到剩余字符少于 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前添加_和一个空格,并将参数的类型更改为UITextView

关于ios - UITextView 限制字符数和剩余显示数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44954296/

相关文章:

iphone - Xcode 4.3.2 中的 UINavigationController 存在问题?

ios - 在整个应用程序中设置 UIKeyboardAppearance

swift - 使用来自 firebase 的数据填充 "initial view"的 tableviewcontroller

ios - handleKeyboardWillShow 通知处理

ios - 使所有应用振动停止设置

ios - 从 SQLite 检索具有多条记录的数据

swift - 实现公共(public)接口(interface)的类型的通用函数

swift - URL验证发布者

ios - 设置 NSLineBreakByTruncatingHead 无效

ios - 如何让 UITextView 键盘不会通过点击而关闭_Swift