Сортировать NSMenuItems по алфавиту, и есть ли у них подменю или нет? - PullRequest
1 голос
/ 10 сентября 2011

Кажется, что это может быть обычным делом, но документы и Google подводят меня. Я бы хотел, чтобы все элементы NSMenu сортировались в алфавитном порядке. Я также хотел бы, чтобы все элементы, которые имеют подменю, были отсортированы первыми. Я сейчас пишу собственный код, используя NSComparator, но я решил спросить и посмотреть, встроен ли он вообще? Path Finder делает это. Я думаю, что Finder может сделать это тоже.

1 Ответ

4 голосов
/ 11 сентября 2011

Я сделал следующий код, так что, думаю, я ответил на свой вопрос:

-(void)sortMenu:(NSMenu*)menu
{
    // [CH] Get an array of all menu items.
    NSArray* items = [menu itemArray];
    [menu removeAllItems];
    // [CH] Sort the array
    NSSortDescriptor* alphaDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES];
    NSSortDescriptor* submenuDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"hasSubmenu" ascending:NO];
    items = [items sortedArrayUsingDescriptors:[NSArray arrayWithObjects:submenuDescriptor,alphaDescriptor, nil]];
    // [CH] ok, now set it back.
    for(NSMenuItem* item in items){
        [menu addItem:item];
        /**
         * [CH] The following code fixes NSPopUpButton's confusion that occurs when
         * we sort this list. NSPopUpButton listens to the NSMenu's add notifications
         * and hides the first item. Sorting this blows it up.
        **/
        if(item.isHidden){
            item.hidden = false;
        }
        // [CH] While we're looping, if there's a submenu, go ahead and sort that, too.
        if(item.hasSubmenu){
            [self sortMenu:item.submenu];
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...