iPhone/iPad 上下文菜单

Posted

技术标签:

【中文标题】iPhone/iPad 上下文菜单【英文标题】:iPhone/iPad context menu 【发布时间】:2010-09-30 17:26:19 【问题描述】:

我说的是当您选择文本块时显示的菜单,它为您提供剪切/粘贴/复制的选项。我想出了如何在菜单中再添加一个选项,但是如果我添加两个或更多选项,它会首先显示“更多”。单击它将显示我添加的所有选项。但是有没有办法显示我预先添加的所有选项?没有“更多”菜单项?

【问题讨论】:

【参考方案1】:

您需要使用UIMenuController。如果您不想复制/粘贴/剪切,您可以在 canPerformAction: 方法中包含类似的内容:

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

创建一个新的菜单项如下所示:

UIMenuItem *someAction = [[UIMenuItem alloc]initWithTitle:@"Something" action:@selector(doSomething:)];

UIMenuController *menu = [UIMenuController sharedMenuController];
menu.menuItems = [NSArray arrayWithObject:someAction];
[menu update];

【讨论】:

不是我不想要这些。我需要再添加两个菜单项。 然后你仍然使用我发布的东西,而不是使用@selector(copy:),将其更改为@selector(copyText:),然后实现你自己的 - (void)copyText 方法复制。那么您的其他项目将不会被推送到更多菜单。 我可以更改菜单项的文本吗? 是的,您可以通过创建自定义 UIMenuItems-developer.apple.com/library/ios/#documentation/UIKit/Reference/… 来实现【参考方案2】:

我假设你在谈论UIMenuController。如果您不想看到 Copy/Paste/Cut/Delete/Select/SelectAll,您需要将以下代码添加到您的 UITextFieldUITextView 的委托中:

- (BOOL)canPerformAction: (SEL)action withSender: (id)sender 
    BOOL answer = NO;
    if (action == @selector(item1)) 
        answer = YES;
    
    if (action == @selector(item2)) 
        answer = YES;
    
    return answer;

其中item1item2UIMenuController.menuItems 中对象的名称。

根据我的经验,如果您使用 UITextView,复制、粘贴、剪切和全选菜单项将保留,在这种情况下,将以下代码添加到 UITextView 的子类中。

- (BOOL) canPerformAction:(SEL)action withSender:(id)sender 
    if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(paste:) || action == @selector(selectAll:)) 
            return YES;
    

【讨论】:

我不想禁用这些选项,我需要再添加两个自定义选项。

以上是关于iPhone/iPad 上下文菜单的主要内容,如果未能解决你的问题,请参考以下文章

使用navigator.userAgent.toLowerCase()判断移动端类型

是否可以强制忽略 iPhone/iPad 用户的 :hover 伪类?

通过USB镜像iPhone/iPad屏幕到电脑

神经引擎 iPhone/iPad 编程

使用 plist 文件在 iPhone / iPad 上安装应用程序时如何正确显示图标和进度?

使用Tenorshare iCareFone for mac为iPhone做系统修复