2015-10-18 3 views
1

Можно ли изменить заголовок UIMenuItem, используемый UIMenuController, когда он собирается всплывать?Изменение названия ярлыка, используемого для UIMenuController, перед его появлением

Например, когда я позволить copy меню в override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool, вместо отображения метки «Copy», он будет отображать копию этикетки и текст Я хочу, чтобы скопировать, как: «Копировать TEXT_I_M_ABOUT_TO_COPY»?

Я думал о создании пользовательского UIMenuItem, но когда я его создаю, мне нужно дать текст для названия. Можно ли изменить этот текст прямо перед тем, как он появится?

ответ

0

Я нашел способ сделать это, я не знаю, если он лучший, но, похоже, работает до сих пор.

Вы должны создать 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 
} 
Смежные вопросы