【发布时间】:2010-09-30 17:26:19
【问题描述】:
我说的是当您选择文本块时显示的菜单,它为您提供剪切/粘贴/复制的选项。我想出了如何在菜单中再添加一个选项,但是如果我添加两个或更多选项,它会首先显示“更多”。单击它将显示我添加的所有选项。但是有没有办法显示我预先添加的所有选项?没有“更多”菜单项?
【问题讨论】:
标签: iphone objective-c ipad ios
我说的是当您选择文本块时显示的菜单,它为您提供剪切/粘贴/复制的选项。我想出了如何在菜单中再添加一个选项,但是如果我添加两个或更多选项,它会首先显示“更多”。单击它将显示我添加的所有选项。但是有没有办法显示我预先添加的所有选项?没有“更多”菜单项?
【问题讨论】:
标签: iphone objective-c ipad ios
您需要使用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];
【讨论】:
我假设你在谈论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;
}
}
【讨论】: