ios 7 - 自定义 UIMenuItem 在 TableViewCell 上不起作用

Posted

技术标签:

【中文标题】ios 7 - 自定义 UIMenuItem 在 TableViewCell 上不起作用【英文标题】:ios 7 - Custom UIMenuItem not working on TableViewCell 【发布时间】:2014-04-10 13:32:40 【问题描述】:

我正在努力在 tableViewCell 上添加自定义 UIMenuItem。我使用这个 *** post 来添加 customMenuItem。这在 ios 6 上运行良好。但在 ios 7 上根本无法运行。

下面是我的实现:

viewDidLoad:

UIMenuItem *sendByEmailMenuItem = [[UIMenuItem alloc] initWithTitle:@"Send By Email" action:@selector(sendByEmail:)];
[[UIMenuController sharedMenuController] setMenuItems: @[sendByEmailMenuItem]];
[[UIMenuController sharedMenuController] update];

然后添加它的委托

// Shared Menu item delegate actions

- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath 
    self.orderAtIndex = [self.orders objectAtIndex:indexPath.row];
    [self becomeFirstResponder];
    return YES;


- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender 

    return  (action == @selector(sendByEmail:));



- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender 
    if (action == @selector(sendByEmail:)) 
        [self sendByEmail:sender];
    

// 子类化表格视图单元格

-(BOOL) canPerformAction:(SEL)action withSender:(id)sender 
    return (action == @selector(sendByEmail:));


- (BOOL)canBecomeFirstResponder 
    return YES;


- (void) sendByEmail: (id) sender 
    // Some actions...

我做错了什么?任何帮助表示赞赏。谢谢

【问题讨论】:

大声笑我 3 天前用这个撞了我的头...... :) 但现在我开始工作了 出了什么问题。你能添加你的解决方案吗 是的,问题是没有调用该方法……becomeFirstResponder 方法成功了……答案中提供了代码…… 帮你解决了...? 不,我在我的 TableViewController 实现中添加了它。但不工作 【参考方案1】:

viewWillAppearviewDidLoad 中,我添加了这些

 UIMenuItem *translateToMenu = [[UIMenuItem alloc] initWithTitle:@"Translate to.." action:@selector(translateTo:)];
 UIMenuController *menuController = [UIMenuController sharedMenuController];
 [menuController setMenuItems:[NSArray arrayWithObject:translateToMenu]];
 [menuController setMenuVisible:YES animated:YES];

添加了这个方法

-(void) translateTo: (id) sender 

只添加这两种方法

- (BOOL) canPerformAction:(SEL)selector withSender:(id) sender 
    if (selector == @selector(translateTo:)) 
        return YES;
    else
        return NO;


- (BOOL) canBecomeFirstResponder 
    return YES;

试试这个,让我知道……

【讨论】:

谢谢,我用 tableViewController 将它添加到新项目中。但仍然无法正常工作。它真的对你有用吗? 是的,我有它在这里工作……它是显示还是不显示? 还有一件事你必须添加...[self becomeFirstResponder];你添加了这个吗? 您没有为此添加任何表格视图委托操作。就像我上面的一样?我也尝试过保留和删除它们。但不能让它工作 哦.. 一件事你有自定义 tableViewCell 吗?

以上是关于ios 7 - 自定义 UIMenuItem 在 TableViewCell 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UIMenuController sharedMenuController - uicollectionview 的自定义菜单项不在 ios 7 中显示

自定义 UIMenuItem 不适用于 PDFKit 的 PDFView

在显示之前将动态自定义 UIMenuItem 添加到复制和粘贴菜单

如何为 UITableViewCell 显示自定义 UIMenuItem?

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

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