我正在尝试使用UIMenuCnotroller
来显示动态生成的项目列表,它们共享相同的操作方法,因此我需要知道在单一操作方法中选择了哪个项目。
但是,在操作方法- (void)menuItemAction:(id)sender;
中,发件人实际上是UIMenuController
对象,我没有找到UIMenuController
的任何方法可以告诉我选择了哪个菜单项。
我能想到的一个解决方案是为不同的项动态生成不同的动作选择器,并在forwardInvocation
但是有更简单的方法吗?
答案 0 :(得分:2)
您可以使用UIMenuCnotroller: 1)创作:
UIMenuController *menuController = [UIMenuController sharedMenuController];
UIMenuItem *open = [[UIMenuItem alloc] initWithTitle:@"Open" action:@selector(open:)];
UIMenuItem *reDownload = [[UIMenuItem alloc] initWithTitle:@"Re-Download" action:@selector(reDownload:)];
[menuController setMenuItems:[NSArray arrayWithObjects:open, reDownload, nil]];
[menuController setTargetRect:cell.frame inView:self.view];
[menuController setMenuVisible:YES animated:YES];
[open release];
[reDownload release];
2)抓住行动应该实施下一个方法:
- (BOOL) canPerformAction:(SEL)selector withSender:(id) sender
{
if (selector == @selector(open:))
{
return YES;
}
if (selector == @selector(reDownload:))
{
return YES;
}
return NO;
}
- (BOOL) canBecomeFirstResponder
{
return YES;
}
3)实现你的方法:
- (void) open:(id) sender
{
[self doSomething];
}
- (void) reDownload:(id) sender
{
[self doSomething];
}
希望,这有帮助。
答案 1 :(得分:1)
好的,我已经解决了这个问题。它涉及弄乱[NSObject forwardInvocation:]并且有点脏,但结果代码非常小。在这里回答:https://stackoverflow.com/a/9874092/790036
答案 2 :(得分:1)
最简单的方法是为每个菜单项使用不同的@selector
方法
<强>示例:强>
UIMenuItem *oneObj = [[UIMenuItem alloc] initWithTitle:@"One" action:@selector(One:)];
UIMenuItem *twoObj = [[UIMenuItem alloc] initWithTitle:@"Two" action:@selector(Two:)];