7

たくさんのアイテムが入ったNSMenuItemがありますが、リストが有効にならないだけです。

私が意味したのは:
リスト

これは私のコードです:

- (void)didFetchNewList:(NSArray *)list
{
    NSArray *smallList = [list subarrayWithRange:NSMakeRange(0, 10)];

    NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];

    for (NSDictionary *dict in smallList)
    {
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"MMM dd @ HH:mm:ss"];

        NSMenuItem *soMenuItem = [[NSMenuItem alloc] initWithTitle:
                  [dateFormatter stringFromDate:[dict objectForKey:@"date"]]
                                                            action:nil
                                                     keyEquivalent:@""];
        [soMenuItem setEnabled:YES];

        [menu addItem:soMenuItem];        
    }

    [menu addItem:[NSMenuItem separatorItem]];

    NSMenuItem *soMenuItem =  [[NSMenuItem alloc]
                     initWithTitle:@"Settings" action:nil keyEquivalent:@"S"];
    [soMenuItem setEnabled:YES];
    [menu addItem:soMenuItem];

    [statusItem setMenu:menu];
    [statusItem setEnabled:YES];

}

すべてを有効に設定していますが、まだ無効になっています。どうすればこれを解決できますか?

4

1 に答える 1

12

NSMenuItemアイテムを作成するときは、有効なターゲットと有効なセレクターが必要です。つまり、ターゲットを nil にすることはできず、渡されたセレクターに応答する必要があります。この場合、NULL セレクターはメニュー項目を有効にしないことに注意してください。

NSMenu *myMenu;
NSMenuItem *myItem;

myMenu = [[NSMenu alloc] initWithTitle:@""];
myItem = [[NSMenuItem alloc] initWithTitle:@"Test" action:@selector(validSelector:) keyEquivalent:@""];
[myItem setTarget:myTarget];
[myMenu addItem:myItem];
// Do anything you like
[myMenu release];
[myItem release];

編集:メニュー項目を作成した後に呼び出し-[NSMenuItem setEnabled:]ているのを見ました。YESデフォルトで有効になっているため、これは必要ありません。

EDIT 2: NSGod が指摘したように (以下のコメントを参照)、ターゲットは nil になる可能性があります。その場合、アプリケーションの最初の応答者は渡されたメソッドを受け取ります。つまり、最初の応答者がそのメソッドを実装している限り。(編集3)ただし、そうでない場合、メソッドはレスポンダーチェーンの次のレスポンダーに送信されます。これは、セレクターに応答するレスポンダーが見つかるか、調べるレスポンダーがなくなるまで続きます。レスポンダーが見つからない場合、メニュー項目は有効になりません。

于 2012-01-05T23:49:03.617 に答える