自定义编辑菜单中 UIMenuItem 的顺序

Posted

技术标签:

【中文标题】自定义编辑菜单中 UIMenuItem 的顺序【英文标题】:Order of UIMenuItems in custom edit menu 【发布时间】:2013-09-27 17:21:59 【问题描述】:

我想将自己的命令添加到选择菜单中,但还要保留标准的“复制”、“剪切”等命令。我用这个:

    UIMenuItem *myItem = [[UIMenuItem alloc] initWithTitle:@"My Command" action:@selector(myCommand:)];
    [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects: myItem, nil]];

但这会将我的命令添加到编辑菜单中列表的最后。我希望我的命令首先出现在其中。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

自己解决了。这是我的initWithCoder: 方法中的内容:

    UIMenuItem *myCommandItem = [[UIMenuItem alloc] initWithTitle:@"My Command" action:@selector(myCommandPressed:)];

    UIMenuItem *cutItem = [[UIMenuItem alloc] initWithTitle:@"Cut" action:@selector(myCut:)];
    UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"Copy" action:@selector(myCopy:)];
    UIMenuItem *pasteItem = [[UIMenuItem alloc] initWithTitle:@"Paste" action:@selector(myPaste:)];
    UIMenuItem *selectItem = [[UIMenuItem alloc] initWithTitle:@"Select" action:@selector(mySelect:)];
    UIMenuItem *selectAllItem = [[UIMenuItem alloc] initWithTitle:@"Select all" action:@selector(mySelectAll:)];
    UIMenuItem *deleteItem = [[UIMenuItem alloc] initWithTitle:@"Delete" action:@selector(myDelete:)];

    [[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObjects: myCommandItem,
                                                           cutItem, copyItem, pasteItem, selectItem, selectAllItem, deleteItem, nil]];

现在这个:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 

    if (action == @selector(myCommandPressed:)) 
        return YES;
    

    if (action == @selector(myCut:)) 
        return [super canPerformAction:@selector(cut:) withSender:sender];
    

    if (action == @selector(myCopy:)) 
        return [super canPerformAction:@selector(copy:) withSender:sender];
    

    if (action == @selector(myPaste:)) 
        return [super canPerformAction:@selector(paste:) withSender:sender];
    

    if (action == @selector(mySelect:)) 
        return [super canPerformAction:@selector(select:) withSender:sender];
    

    if (action == @selector(mySelectAll:)) 
        return [super canPerformAction:@selector(selectAll:) withSender:sender];
    

    if (action == @selector(myDelete:)) 
        return [super canPerformAction:@selector(delete:) withSender:sender];
    

    return NO;

最后:

- (void) myCommandPressed: (id) sender 
    NSLog(@"My Command pressed");



- (void) myCut: (id) sender 
    [self cut:sender];


- (void) myCopy: (id) sender 
    [self copy:sender];


- (void) myPaste: (id) sender 
    [self paste:sender];


- (void) mySelect: (id) sender 
    [self select:sender];


- (void) mySelectAll: (id) sender 
    [self selectAll:sender];


- (void) myDelete: (id) sender 
    [self delete:sender];

【讨论】:

我把第一块代码放在了一个ViewController的initWithCoder中,但是副本还是先出现。

以上是关于自定义编辑菜单中 UIMenuItem 的顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UITableViewCell 显示自定义 UIMenuItem?

如何在 UIMenuController 中删除 COPY UIMenuItem

IOS5 中的自定义 UIMenuItem 太宽

UIMenuContoller UIMenuItem 具有多个参数的自定义操作?

自定义 UIMenuItem 不适用于 PDFKit 的 PDFView

Excel自定义功能栏图标突然变大,快捷键不能全部显示,应如调整