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

问题描述:

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

代码我迄今(由朱利的回答启发)

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: _lookup: _define: _addShortcut: _accessibilitySpeak: _accessibilitySpeakLanguageSelection: _accessibilityPauseSpeaking: _share: makeTextWritingDirectionRightToLeft: makeTextWritingDirectionLeftToRight:

Eventhough粘贴选择没有列在这里它,在弹出的菜单中。

+0

我想你可以只读取并显示在用户做任何事情之前,有些类似于浏览器的应用程序,不知道拦截行动,也许拦截出现textfield文本是更好的主意 – Tj3n

+0

你的意思是粘贴内容在'UITextField'或'UITextView'? – KrishnaCA

你应该重写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类

+0

谢谢你。请参阅最新的问题。似乎还没有工作。对不起,忘了提及我正在查看UIWebView。 –

+0

我从来没有尝试,但这应该与UIWebView工作。扩展UIWebView而不是UITextField – Ludovic

之前将其粘贴为

let pasteboardString: String? = UIPasteboard.general.string 
if let theString = pasteboardString { 
    print("String is \(theString)") 
} 
+1

我认为这将只显示已复制到UIPasteboard的字符串,但在用户触摸“粘贴”之前不会触发。 – Ludovic

+0

你的意思是粘贴在UITextField或UITextView的内容? – Ram

Objec你可以粘贴的内容略去ç

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

斯威夫特

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

我应该在哪里放置这段代码?我什么时候才能知道普通粘贴板复制了内容? –