我正在使用UIMenuController的新自定义功能将"复制"以外的内容添加到菜单中以便剪切并粘贴到webview中.
我所做的是获取对共享UIMenuController的引用,将我的NSArray的UIMenuItems设置为menuItems,只要我添加一个项目,一切正常.例如,我看到[COPY | FOOBAR].
相反,如果我尝试添加多个项目,那么我会看到[复制|更多],如果我按下MORE而不是最终其他项目将会显示.
可以直接显示[COPY | FOO | BAR | THREE | FOUR]而不是?我看到了一些能够做到这一点的应用程序,尤其是iBooks.
任何非常有帮助的帮助,谢谢.
干杯,sissensio
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; }