Ваш код работает как реализовано:
- В тот момент, когда вы нажимаете элемент меню pasteAndGo , платформа UIKit вызывает
canPerformAction
, чтобы спросить, разрешено ли выполнять действие или нет. Здесь вы печатаете «вставить и пойти показать»
- Так как вы возвращаете
true
, ваше действие pasteAndGo(sender:)
выполняется и печатает «вставь и нажми»
Чтобы отреагировать на отображаемый элемент меню, вам необходимо зарегистрироваться в центре уведомлений с уведомлением UIMenuControllerWillShowMenu
, например:
// create a property
var token:NSObjectProtocol?
// then add observer
self.token = NotificationCenter.default.addObserver(forName: Notification.Name.UIMenuControllerWillShowMenu,
object: nil,
queue: OperationQueue.main)
{ _ in
print ("paste and go show")
}
и не забудьте отписаться (NotificationCenter.default.removeObserver
), как только ваш viewcontroller будет удален.
if let t = self.token {
NSNotificationCenter.defaultCenter().removeObserver(t)
}
Обновление
Вы также можете сделать это (без свойств) в Init
// in Init
var token = NotificationCenter.default.addObserver(forName: Notification.Name.UIMenuControllerWillShowMenu,
object: nil,
queue: OperationQueue.main)
{ _ in
print ("paste and go show")
NSNotificationCenter.defaultCenter().removeObserver(token)
}