Определить, скопировал ли пользователь текст из текстового поля
Я хочу использовать слово, которое пользователь копирует из моего текстового поля приложения.
Я нашел этот код:
NotificationCenter.default.addObserver(self, selector: #selector(clipboardChanged), name: UIPasteboard.changedNotification, object: nil)
Но функция clipboardChanged не вызывается при копировании текста из текстового поля.
Я использую Swift 4.2
1 ответ
Этот код отлично сработал для меня:
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
Отображение меню с командами "Копировать", "Вырезать", "Вставить", "Выделить" и "Выбрать все" над или под выделением.
См:
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 изменен Уведомление
class let changedNotification: NSNotification.Name
Это происходит в то же время, когда увеличивается число изменений в монтажном столе (свойство changeCount). Изменения включают добавление, удаление и модификацию элементов картона.
См. https://developer.apple.com/documentation/uikit/uipasteboard