繁体   English   中英

iOS:如何从UIMenuController获取所选的UIMenuItem

[英]iOS: How to get the selected UIMenuItem from UIMenuController

我正在尝试使用UIMenuCnotroller来显示动态生成的项目列表,它们共享相同的操作方法,因此我需要知道在单一操作方法中选择了哪个项目。

但是,在action方法- (void)menuItemAction:(id)sender; 发件人实际上是UIMenuController对象,我没有找到UIMenuController任何方法可以告诉我选择了哪个menuitem。

我能想到的一个解决方案是为不同的项动态生成不同的动作选择器,并在forwardInvocation做一些技巧

但是有更简单的方法吗?

您可以使用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];
}

希望这可以帮助。

最简单的方法是为每个菜单项使用不同的@selector方法

例子:

UIMenuItem *oneObj = [[UIMenuItem alloc] initWithTitle:@"One" action:@selector(One:)];

UIMenuItem *twoObj = [[UIMenuItem alloc] initWithTitle:@"Two" action:@selector(Two:)];

好的,我已经解决了这个问题。 它涉及弄乱[NSObject forwardInvocation:]并且有点脏,但结果代码非常小。 这里回答: https//stackoverflow.com/a/9874092/790036

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM