如何显示自定义弹出窗口而不是 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的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义对话框定位在特定坐标?

需要为EditText长触摸而不是ActionMode自定义弹出窗口

Kendo Grid - 自定义编辑弹出窗口

如何在弹出窗口或工具提示中显示自定义HTML

如何在 PyQt 中自定义 QCompleter 弹出窗口?

Leaflet - 在标记点击时从json获取数据,而不是弹出窗口