在 UIMenuController 出现之前更改用于 UIMenuController 的标签标题

Posted

技术标签:

【中文标题】在 UIMenuController 出现之前更改用于 UIMenuController 的标签标题【英文标题】:Changing label title used for UIMenuController right before it appears 【发布时间】:2015-10-18 08:22:08 【问题描述】:

UIMenuController 即将弹出的UIMenuItem 使用的标题是否可以更改?

例如,当我允许override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool 中的copy 菜单时,它不会显示标签“复制”,而是显示标签副本和我要复制的文本,例如:“复制 TEXT_I_M_ABOUT_TO_COPY”?

我想过制作一个自定义 UIMenuItem,但是当我创建它时,我必须为标题提供文本。是否可以在该文本出现之前对其进行更改?

【问题讨论】:

【参考方案1】:

我找到了一种方法,我不知道它是否是最好的,但到目前为止似乎有效。

您必须创建一个 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

【讨论】:

以上是关于在 UIMenuController 出现之前更改用于 UIMenuController 的标签标题的主要内容,如果未能解决你的问题,请参考以下文章

UIMenuController 没有出现

辅助屏幕的 makeKeyAndVisible 阻止 UIMenuController 出现

是否可以自定义 UIMenuController 的颜色?

UIMenuController 显示错误的项目

确定何时解除 UIMenuController?

UIMenuController 在呈现后立即被解雇