Я нашел способ сделать это, я не знаю, если он лучший, но, похоже, работает до сих пор.
Вы должны создать UIMenuItem, добавьте его в UIMenuController общий экземпляр:
let frame = frameWhereYouWantToMakeTheMenuAppear.frame
let rect = CGRectMake(frame.midX, frame.maxY, 1, 1)
let customPasteMenu = UIMenuItem(title: "Paste", action: "customPaste:")
let menuController = UIMenuController.sharedMenuController()
menuController.menuItems = [customPasteMenu]
menuController.arrowDirection = UIMenuControllerArrowDirection.Up
menuController.setTargetRect(rect, inView: displayView)
menuController.setMenuVisible(true, animated: true)
Затем в методе func canPerformAction
, вы делаете тесты или не позволяют действие, и как только вы о для возврата true
, здесь вы получите общий экземпляр UIMenuController
, получите свой пункт меню из списка пунктов меню и измените заголовок.
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
if action == "customPaste:" {
// do your tests and get what you want to paste for example
let menuController = UIMenuController.sharedMenuController()
if let customPasteMenu = menuController.menuItems?.first {
customPasteMenu.title = yourTitle + FormatterHelper.formatAmount(stringToPaste)
}
return true
}
return false
}