You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:25:25