检测用户是否从文本字段复制文本

Detect if user copied text from textfield

我想使用用户从我的应用程序文本字段中复制的词。

我找到了这段代码:

NotificationCenter.default.addObserver(self, selector: #selector(clipboardChanged), name: UIPasteboard.changedNotification, object: nil)

但是 'clipboardChanged' 从文本字段复制文本时没有调用函数。

我用Swift4.2

这段代码对我来说工作得很好:

    override func copy(_ sender: Any?) {
        super.copy()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(clipboardChanged), name: UIPasteboard.changedNotification, object: nil)
    }

    @objc func clipboardChanged(){
        print("Cut/Copy Performed")
    }

复制通知有多种实现方式

1。 UIMenuController

显示一个菜单,其中包含复制、剪切、粘贴、Select 和 Select 选择上方或下方的所有命令。

参考:

https://developer.apple.com/documentation/uikit/uimenucontroller

https://nshipster.com/uimenucontroller/

2。 UIResponderStandardEditActions 协议

响应者实现在这个非正式协议中声明的方法来处理选择的菜单命令(例如,copy:paste:)。因为你的 UIViewController 继承自 UIResponder 确实符合 UIResponderStandardEditActions,所以它会给你错误说 Redundant conformance。所以直接实现你需要的方法即可。

参考:https://developer.apple.com/documentation/uikit/uiresponderstandardeditactions

3。 UIPasteboard changedNotification

class let changedNotification: NSNotification.Name

这发生在粘贴板的更改计数 (changeCount 属性) 递增的同时。更改包括粘贴板项目的添加、删除和修改。

参考:https://developer.apple.com/documentation/uikit/uipasteboard