拦截UIWebView中的粘贴操作(Swift)

时间:2017-02-20 11:10:34

标签: ios swift uiwebview

Swift中有没有办法在粘贴之前获取粘贴的内容?理想情况下,当用户选择“粘贴”时,我应该阅读要粘贴的内容。从可编辑元素的默认弹出菜单中。现在我正在看一个带有内容可编辑div的UIWebView。

我到目前为止的代码(灵感来自Ludovic的答案)

class myWebView: UIWebView {

        override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        print(action)

        return super.canPerformAction(action, withSender: sender)
    }

}

输出(每次点击内容可编辑div时):

切: 复制: 选择: 全选: 删除: _promptForReplace: _transliterateChinese: _showTextStyleOptions: _抬头: _限定: _addShortcut: _accessibilitySpeak: _accessibilitySpeakLanguageSelection: _accessibilityPauseSpeaking: _分享: makeTextWritingDirectionRightToLeft: makeTextWritingDirectionLeftToRight:

尽管此处未列出粘贴选择器,但它在弹出菜单中可用。

3 个答案:

答案 0 :(得分:0)

您应该覆盖canPerformAction方法以捕捉操作

override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    if action == #selector(paste(_:)) {
        // Do something
        return false // Will disable paste action
    }

    return super.canPerformAction(action, withSender: sender)  
}

您可以扩展所有UITextField以在您的应用中的任何位置使用此功能,或创建自定义CatchPasteTextField以仅为给定的UITextField类提供此功能

答案 1 :(得分:0)

您可以在粘贴为

之前获取粘贴的内容
let pasteboardString: String? = UIPasteboard.general.string
if let theString = pasteboardString {
    print("String is \(theString)")
}

答案 2 :(得分:0)

目标C

CLS_LOG(@"copied test %@",[[UIPasteboard generalPasteboard] string]);

<强>夫特

print("String is \(UIPasteboard.general.string)")