2015-10-18 49 views
1

當它即將彈出時,是否可以更改UIMenuController使用的UIMenuItem的標題?在出現之前更改用於UIMenuController的標籤標題

例如,當我允許override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Boolcopy菜單,而不是顯示標籤「複製」,它會顯示在標籤副本,我想複製類似的文字:「複製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 
}