ответ FluXa на самом деле правильный, но я не думаю, что он был очень ясным.
Проблема заключается в том, что при добавлении пользовательских объектов UIMenuItem в контроллер общего меню ([UIMenuController sharedMenuController]) только первый пользовательский UIMenuItem будет отображаться на начальном экране меню. Остальные пункты пользовательского меню будут показаны, если пользователь нажмет «Еще ...».
Однако, если в меню отсутствуют какие-либо элементы встроенного системного меню (copy :, paste: и т. Д.), На начальном экране меню отобразятся все пользовательские пункты меню, а не «More ...». товар.
Если вам нужно включить встроенные системные элементы, просто добавьте пользовательские элементы UIMenuItems с тем же названием, но с другим селектором. (myCopy: vs. 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;
}