【问题标题】:UIMenuController with UITableViewController doesn't work带有 UITableViewController 的 UIMenuController 不起作用
【发布时间】:2013-01-06 14:13:19
【问题描述】:

当用户选择表中的任何行时,我试图显示UIMenuController。我正在使用UITableViewController 显示带有自定义单元格的表格。

我的代码:-

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   // [tableView deselectRowAtIndexPath:indexPath animated:NO];

    MyCell *cell = (MyCell *)[tableView cellForRowAtIndexPath:indexPath];
    CGRect cellFrame = cell.frame;

    [self.view becomeFirstResponder];

    UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"Item1" action:@selector(action1:)];
    UIMenuItem *menuItem1 = [[UIMenuItem alloc] initWithTitle:@"Item2" action:@selector(action2:)];
    UIMenuItem *menuItem2 = [[UIMenuItem alloc] initWithTitle:@"Item3" action:@selector(action3:)];

    UIMenuController * menuController = [UIMenuController sharedMenuController];
    menuController.menuItems = [NSArray arrayWithObjects:menuItem, menuItem1, menuItem2, nil];
    menuController.arrowDirection = UIMenuControllerArrowDown;

    [menuController setTargetRect:cellFrame inView:self.view];

    [menuController setMenuVisible:YES animated:YES];
}

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

但是UIMenuController 没有显示。上面的代码有什么问题?

另外,我推荐了these links。但没有运气。

【问题讨论】:

标签: iphone objective-c ios5 uitableview


【解决方案1】:

如果只长按后显示菜单没问题,则无需使用tableView:didSelectRowAtIndexPath: 并自己显示菜单。

相反,您可以使用此委托方法:

- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

要隐藏标准项(剪切、复制和粘贴),请在此处返回 NO:

- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
    return NO;
}

然后你需要像你一样从canBecomeFirstResponderreturn YES,由于某种原因,我也必须实现这个方法:

- (BOOL)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
    return YES;
}

【讨论】:

  • 确定 UIMenuController 何时被解除?
  • 此通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willHideEditMenu:) name:UIMenuControllerWillHideMenuNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didHideEditMenu:) name:UIMenuControllerDidHideMenuNotification object:nil]; 无法使用此代表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多