UITextView 限制字符并显示剩余计数
Posted
技术标签:
【中文标题】UITextView 限制字符并显示剩余计数【英文标题】:UITextView limit characters and display count left 【发布时间】:2017-07-06 16:23:16 【问题描述】:我正在尝试将 UITextView
的字符限制为 200。如果没有,它会从 Firebase 数据库(如果可用)获取数据 - 代表剩下的字符的 UILabel
应该被隐藏 - 因此,如果有数据(文本字段中的文本应该显示带有左侧字符的UILabel
。
我确保将我的UIViewController
设置为UITextViewDelegate
的代表,并且我还设置了IBOutlet weak var descriptionTextView: TextViewX!
(TextViewX 是UITextView
的子类)并在@ 中设置descriptionTextView.delegate = self
987654329@ 方法。一旦您开始在文本视图中输入,标签计数根本不会更新或显示。
另外,当UILabel
检测到剩余的字符少于 30 个时,我还想将其颜色从绿色更改为红色。
这是我拥有的代码,但它不起作用。剩下的字符根本不显示:
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)"
【问题讨论】:
它是否成功阻止您在达到 200 个字符时输入更多文本? 你确定你的委托方法是通过放置断点来调用的吗? @Sweeper - 它达到极限并停止。 @Fangming Ning - 是的,代表有效。 @rmaddy - 它不是隐藏的,而是可见的。我看到UILabel
【参考方案1】:
如果您仔细查看UITextViewDelegate
的文档,您会发现textViewDidChange
的定义如下:
optional func textViewDidChange(_ textView: UITextView)
看参数!它需要一个外部参数名称为_
!的参数!
看看你写了什么:
func textViewDidChange(textView: TextViewX)
您的参数的外部名称是textView
!
这就是它不起作用的原因。
因此,只需在textView
之前添加_
和一个空格,并将参数类型更改为UITextView
。
【讨论】:
我添加了descriptionTextView.addTarget(self, action: #selector(textChanged), for .editingChanged)
,但它显示了与“for”相关的错误,即“表达式列表中的预期表达式”
@Dani 您需要在for
之后添加:
。我的错!
我认为是这种情况,我尝试使用:
,但它显示另一个错误,指出“TextViewX 类型的值没有成员添加目标”
@Dani 我现在发现您的代码有什么问题。请参阅编辑后的答案。
天啊!是的!哈哈哈一小_
,整个代码无效!非常感谢!以上是关于UITextView 限制字符并显示剩余计数的主要内容,如果未能解决你的问题,请参考以下文章