Определить, скопировал ли пользователь текст из текстового поля

Я хочу использовать слово, которое пользователь копирует из моего текстового поля приложения.

Я нашел этот код:

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

Другие вопросы по тегам