2017-02-20 65 views
1

在粘貼內容之前,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

回答

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類

+0

謝謝你。請參閱最新的問題。似乎還沒有工作。對不起,忘了提及我正在查看UIWebView。 –

+0

我從來沒有嘗試,但這應該與UIWebView工作。擴展UIWebView而不是UITextField – Ludovic

0

之前將其粘貼爲

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

我認爲這將只顯示已複製到UIPasteboard的字符串,但在用戶觸摸「粘貼」之前不會觸發。 – Ludovic

+0

你的意思是粘貼在UITextField或UITextView的內容? – Ram

0

Objec你可以粘貼的內容略去ç

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

斯威夫特

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

我應該在哪裏放置這段代碼?我什麼時候才能知道普通粘貼板複製了內容? –