6

動的に生成されたアイテムのリストを表示するために使用しようとしてUIMenuCnotrollerいますが、それらは同じアクション メソッドを共有しているため、単一のアクション メソッドでどのアイテムが選択されているかを知る必要があります。

ただし、アクションメソッド- (void)menuItemAction:(id)sender;では送信者が実際にはオブジェクトであり、どのメニューアイテムが選択されているかを教えてくれるUIMenuControllerメソッドが見つかりませんでした。UIMenuController

私が考えることができる1つの解決策は、さまざまなアイテムに対してさまざまなアクションセレクターを動的に生成し、いくつかのトリックを実行することですforwardInvocation

しかし、もっと簡単な方法はありますか?

4

3 に答える 3

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];
}

お役に立てれば。

于 2012-01-06T11:33:39.967 に答える
1

さて、私はこれを解決しました。[NSObject forwardInvocation:] をいじる必要があり、少し汚れていますが、結果のコードは非常に最小限です。ここで回答: https://stackoverflow.com/a/9874092/790036

于 2012-03-26T14:35:38.497 に答える