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,您需要将以下代码添加到您的 UITextField
或 UITextView
的委托中:
- (BOOL)canPerformAction: (SEL)action withSender: (id)sender
BOOL answer = NO;
if (action == @selector(item1))
answer = YES;
if (action == @selector(item2))
answer = YES;
return answer;
其中item1
和item2
是UIMenuController.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 伪类?