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

iOS 15中UIResponderStandardEditActions新增pasteAndGo(_:)方法的使用异常求助

解决iOS15中pasteAndGo:未识别选择器的问题

嘿,我刚好研究过iOS15这几个新增的粘贴相关API,你踩的坑其实是对这些方法的本质理解有偏差,咱们一步步理清楚:

首先纠正一个关键误解

你以为pasteAndGo(_:)是系统给UITextField预设的别名方法?其实不是!这些新增的pasteAndMatchStyle:、pasteAndGo:、pasteAndSearch:是UIResponderStandardEditActions协议新增的可选方法,系统的UITextField、UITextView这些文本控件并没有默认实现它们。系统提供这些方法的核心目的是:当用户主动触发这些操作时,系统会明确这是用户的意图,不会弹出那个烦人的剪贴板访问提示横幅——而粘贴的具体逻辑,完全需要我们自己来实现。

为什么会抛出"unrecognized selector"异常?

你在代码里调用textField.pasteAndGo(sender),但UITextField根本没实现这个方法,自然会触发这个错误。系统只是定义了这些方法的协议接口,并没有给文本控件做默认实现。

正确的实现方式

我们需要自己在响应者(比如你的ViewController,或者自定义的文本控件子类)里实现pasteAndGo(_:)方法,手动完成「粘贴内容+执行对应动作」的逻辑。这里给你修正后的代码示例:

class ViewController: UIViewController {
    @IBOutlet weak var textField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let item = UIMenuItem(title: "Paste & Go", action: #selector(pasteAndGo(_:)))
        UIMenuController.shared.menuItems = [item]
    }
    
    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if action == #selector(pasteAndGo(_:)) {
            // 优化:只有剪贴板有文本内容时,才显示这个菜单项
            return UIPasteboard.general.hasStrings
        }
        return super.canPerformAction(action, withSender: sender)
    }
    
    override func pasteAndGo(_ sender: Any?) {
        // 1. 先获取剪贴板的文本内容
        guard let pastedText = UIPasteboard.general.string else {
            return
        }
        
        // 2. 将内容粘贴到文本框
        textField.text = pastedText
        
        // 3. 执行"Go"对应的业务逻辑,比如打开URL
        if let targetURL = URL(string: pastedText), UIApplication.shared.canOpenURL(targetURL) {
            UIApplication.shared.open(targetURL)
        }
        // 如果是搜索场景,这里可以换成发起搜索请求、跳转到搜索页面等逻辑
    }
}

额外提示

这些新API的核心价值就是规避剪贴板访问提示,只要是用户主动触发这些方法(比如点击你添加的自定义菜单项),系统就不会弹出那个提示横幅。而粘贴的动作、后续的业务逻辑,都需要我们根据自己的需求来编写。

内容的提问来源于stack exchange,提问作者Stefan Arentz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:37:32