UITextView限制字符+禁用回车 需保留复制粘贴及换行粘贴功能
解决UITextView字符限制与回车禁用的同时保留复制粘贴功能
你的代码存在两个核心问题:
- 换行拦截逻辑错误:不管是键盘输入的回车还是粘贴的带换行内容,只要文本包含换行就被阻止,导致无法粘贴带换行的内容。
- 字符数限制逻辑生硬:超过200字符直接禁止操作,导致无法粘贴超长内容(即使只需要前200字符)。
以下是修正后的代码,完全满足你的需求:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { // 仅禁用键盘回车按键(拦截单个换行的键盘输入) if text == "\n" { return false } // 计算替换后的完整文本 let currentText = textView.text as NSString let newText = currentText.replacingCharacters(in: range, with: text) // 处理200字符限制:超长时自动截断 guard newText.count <= 200 else { let truncatedText = String(newText.prefix(200)) textView.text = truncatedText // 将光标定位到文本末尾 textView.selectedRange = NSRange(location: 200, length: 0) return false } return true }
关键修改说明:
- 回车拦截优化:仅当输入的文本是单个
\n时(即用户按键盘回车)才返回false,粘贴带换行的长文本不会被拦截,符合需求。 - 字符数限制优化:不再直接禁止超长内容的粘贴,而是自动截断到200字符并设置到UITextView,同时调整光标位置到末尾,保证用户体验。
内容的提问来源于stack exchange,提问作者adalovelacy
相关产品推荐
相关产品推荐

