2017-02-20 21 views
1

Есть ли способ в Swift получить вставленный контент перед его вставкой? В идеале я должен прочитать, чтобы быть вставленным контентом, когда пользователь выбирает «вставить» из всплывающего меню по умолчанию в редактируемом элементе. Прямо сейчас я смотрю на UIWebView с содержимым редактируемого div.Перехват действия пасты в UIWebView (Swift)

код Я до сих пор (вдохновленный ответ Лодовико в)

class myWebView: UIWebView { 

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

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

} 

Output (каждый раз, когда я нажимаю на контента редактируемые дел):

вырезать: копия: выберите: SelectAll: удалить: _promptForReplace: _transliterateChinese: _showTextStyleOptions: _lookup: _define: _addShortcut: _accessibilitySpeak: _accessibilitySpeakLanguageSelection: _accessibilityPauseSpeaking: _share: makeTextWritingDirectionRightToLeft: makeTextWritingDirectionLeftToRight:

Селектор Eventhough паста не перечислен здесь он доступен в меню.

+0

Я думаю, вы можете просто прочитать и показать его до того, как пользователь может делать что-нибудь, похожий на какой-то браузер приложение, не уверен, что о перехвате действие, может перехватывать текст текста появляется лучше идея – 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

Я думаю, что это покажет только строку, которая была скопирована на UIP-архив, но не будет запускаться до того, как пользователь коснется «вставки». – Ludovic

+0

Вы имеете в виду вставку содержимого в UITextField или UITextView? – Ram

0

объективистских TIVE C

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

Swift

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

где я должен разместить этот код? Когда я узнаю, что общий картон скопировал контент? –