2

我在视图控制器上有一个 UITable 和一个 UITextView。当我长按 tableviewcell 时,我想拥有一个带有选项“复制”和“信息”的自定义 UIMenuController,并且我希望在 UITextView 的长按上拥有默认的 UIMenuController。

我搜索了一个解决方案,现在我可以创建一个自定义 UIMenuItem 'Info'。但是,当我长按 UITextView 时,我看到还附加了“信息”。

如何仅为 UITableView 而不是 UITextView 设置自定义 UIMenuController?我想要 UITextView 中的默认选项。

4

2 回答 2

0

Your question:

How can I set custom UIMenuController only for the UITableView and not for UITextView? I want the default options alone in the UITextView.

The answer is: You can't.

Reason: You can only get the UIMenuController Instance by invoking class method like this:[UIMenuController sharedMenuController]. See Apple's documentation:UIMenuController

How to solve the issue:

Set your custom UIMenuItems nil When shared UIMenuController will hide.

Example code:

-(void)longPress:(UILongPressGestureRecognizer*)gesture {
    //other stuff code...
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMenuWillShowNotification:) name:UIMenuControllerWillShowMenuNotification object:nil];
}

-(void)handleMenuWillShowNotification:(NSNotification*)notification {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIMenuControllerWillShowMenuNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMenuWillHideNotification:) name:UIMenuControllerWillHideMenuNotification object:nil];
}

-(void)handleMenuWillHideNotification:(NSNotification*)notification {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIMenuControllerWillHideMenuNotification object:nil];
    UIMenuController *menuController = notification.object;
    [menuController setMenuItems:nil];
}
于 2014-07-31T10:14:02.193 回答
0

在这里有点晚了,
我也遇到了同样的问题,默认 UIMenuController 默认项被添加到自定义项中,因为它是跨应用程序的共享实例控件。
  你应该继承你的 UITextView 并添加方法:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
      if ( action== @selector(yourMethodInfo:)) {
                    return NO; }

                     return YES;

    }

也不要使用 UIMenuController 的 sharedInstance 并为您的 Custom TextView 子类创建一个单独的对象并使用它。从 UITableView 调用 UIMenuController 后,您应该
  [menuController setMenuItems:nil]; [menuController setMenuVisible:NO]; [menuController update]; menuController= nil; 在选择器方法上选择菜单项后执行。


  如果有人需要更多参考,请告诉我,我可以提供更多解释。

于 2014-06-26T10:43:42.490 回答