我正在使用 UIMenuController 的新自定义功能将“复制”以外的内容添加到菜单中,以便剪切并粘贴到 Web View 中。
我所做的就是获取对共享 UIMenuController 的引用,将 UIMenuItems 的 NSArray 设置到 menuItems 中,只要添加一个项目,一切都可以正常工作。例如,我看到 [COPY|FOOBAR]。
相反,如果我尝试添加多个项目,会发生什么情况,我会看到 [COPY|MORE],如果我按下 MORE 按钮,最终其他项目就会显示出来。
可以直接显示[COPY|FOO|BAR|THREE|FOUR]吗?我看到一些应用程序可以做到这一点,特别是 iBooks。
非常感谢任何帮助,谢谢。
干杯, 西森西奥
最佳答案
fluXa的答案实际上是正确的,但我认为不是很清楚。
问题是,当将自定义 UIMenuItem 对象添加到共享菜单 Controller ([UIMenuController sharedMenuController]) 时,只有第一个自定义 UIMenuItem 将显示在菜单的初始显示上。如果用户点击“更多...”,将显示剩余的自定义菜单项。
但是,如果菜单不包含任何内置系统菜单项(复制:、粘贴:等),则初始菜单显示将显示所有自定义菜单项,并且不会显示“更多...”项目。
如果您需要包含内置系统项目,只需添加具有相同标题但具有不同选择器的自定义 UIMenuItems 即可。 ( myCopy: 与 copy: )
本质上,它归结为不调用 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;
}
关于iphone - 接连显示 UIMenuController 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3255070/