如何显示自定义弹出窗口而不是 UIMenuController

Posted

技术标签:

【中文标题】如何显示自定义弹出窗口而不是 UIMenuController【英文标题】:How to display Custom popup instead of UIMenuController 【发布时间】:2013-07-02 11:41:41 【问题描述】:

我正在创建一个包含 UITextView 的应用程序,其中包含大量文本。当我双击任何文本而不是其默认行为时,会发生并显示UIMenuController。像这样,

但我想像这样显示自定义弹出窗口而不是 UIMenuController

我该怎么做?

更新

UIMenuController 打开时会调用哪个方法?

【问题讨论】:

看到这个:***.com/questions/3267296/… 和 ***.com/questions/3537795/… @DharaParekh 正如我所说,我不想在 UIMenucontroller 中添加更多选项,但我想用弹出窗口替换它 【参考方案1】:

检查此question 的已接受答案。

您可以继承 UITextField 并覆盖以下方法以禁用您想要的任何操作:

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

    if (action == @selector(paste:))
    
        return NO;
    
    else if (action == @selector(cut:))
    
        return NO; 
    
    else if (action == @selector(copy:))
    
        return NO;
    
     ... //etc etc

    return [super canPerformAction:action withSender:sender];

并使用以下代码显示您自己的:

UIMenuController *menu = [UIMenuController sharedMenuController];
[menu setTargetRect:textField.frame inView:textField.superview];
[menu setMenuItems:[NSArray arrayWithObjects:
                            [[UIMenuItem alloc] initWithTitle:@"Test" action:@selector(test)],
                            nil]];
[menu setMenuVisible:YES animated:YES];

canPeformAction:withSender: 方法中,您可以为选择器Test 返回YES

【讨论】:

以上是关于如何显示自定义弹出窗口而不是 UIMenuController的主要内容,如果未能解决你的问题,请参考以下文章