当前位置:  开发笔记 > Android > 正文

一个接一个地显示UIMenuController的问题

如何解决《一个接一个地显示UIMenuController的问题》经验,为你挑选了1个好方法。

我正在使用UIMenuController的新自定义功能将"复制"以外的内容添加到菜单中以便剪切并粘贴到webview中.

我所做的是获取对共享UIMenuController的引用,将我的NSArray的UIMenuItems设置为menuItems,只要我添加一个项目,一切正常.例如,我看到[COPY | FOOBAR].

相反,如果我尝试添加多个项目,那么我会看到[复制|更多],如果我按下MORE而不是最终其他项目将会显示.

可以直接显示[COPY | FOO | BAR | THREE | FOUR]而不是?我看到了一些能够做到这一点的应用程序,尤其是iBooks.

任何非常有帮助的帮助,谢谢.

干杯,sissensio



1> TomSwift..:

fluXa的答案实际上是正确的,但我不认为它非常清楚.

问题是,当将自定义UIMenuItem对象添加到共享菜单控制器([UIMenuController sharedMenuController])时,只有第一个自定义UIMenuItem将显示在菜单的初始显示上.如果用户点击"更多...",将显示剩余的自定义菜单项.

但是,如果菜单中不包含任何内置系统菜单项(复制:,粘贴:等),初始菜单显示将显示所有自定义菜单项,而不显示"更多..."项.

如果需要包含内置系统项,只需添加具有相同标题但具有不同选择器的自定义UIMenuItem.(myCopy:与副本:)

从本质上讲,它归结为不调用canPerformAction的默认实现:withSender:,显式处理所有自定义菜单项,并为所有其他(系统提供的)菜单项返回NO:

- (BOOL) canPerformAction:(SEL)action withSender:(id)sender
{
    if ( action == @selector( onCommand1: ) )
    {
        // logic for showing/hiding command1
        BOOL show = ...;
        return show;
    }

    if ( action == @selector( onCommand2: ) )
    {
        // logic for showing/hiding command2
        BOOL show = ...;
        return show;
    }

    if ( action == @selector( onCopy: ) )
    {
        // always show our custom "copy" command
        return YES;
    }   

    return NO;
}

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有