如何在UITextView中获取选中文本?自定义复制按钮报错求助
解决UITextView无法获取选中文本的问题
嘿,这个问题我之前也踩过坑!你遇到的错误是因为Swift里UITextView获取选中范围文本的方法不是textInRange:——这个是Objective-C的写法,Swift里对应的正确方法是text(in:)。
另外还要注意,selectedTextRange是可选值(用户可能没选中任何文本),直接用的话容易触发崩溃,最好先做可选绑定处理。
修正后的代码应该是这样的:
@IBAction func copyButton(_ sender: Any) { // 先判断是否有选中的文本范围 guard let selectedRange = textView.selectedTextRange else { // 没有选中的话可以提示用户,或者直接返回 return } // 使用正确的text(in:)方法获取选中文本 let selectedText = textView.text(in: selectedRange) // 将文本复制到剪贴板 UIPasteboard.general.string = selectedText }
补充几个小提示:
- 如果需要处理用户没选文本的情况,可以在这里加个提示框(比如用
UIAlertController)告诉用户先选中要复制的内容 - 如果你还需要兼容Objective-C的写法,才会用到
textInRange:,但Swift里完全推荐用text(in:)
内容的提问来源于stack exchange,提问作者Josh




