Как выбрать объекты в NSOutlineView без NSTreeController?

Использование jdom2: http://www.jdom.org/

import java.io.StringReader;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

String prettyXml = new XMLOutputter(Format.getPrettyFormat()).
                         outputString(new SAXBuilder().build(new StringReader(uglyXml)));

12
задан cocoafan 8 July 2009 в 09:15
поделиться

3 ответа

Не забывайте заглядывать в суперклассы, когда не можете что-то найти. В этом случае один из необходимых вам методов исходит из NSTableView, который является непосредственным суперклассом NSOutlineView.

Решение состоит в том, чтобы получить индекс строки для элемента, используя rowForItem: , и если он не -1 (элемент не виден / не найден), создайте с ним набор индексов с помощью [NSIndexSet indexSetWithIndex:] и передайте этот набор индексов в selectRowIndexes: byExndingSelection: метод .

22
ответ дан 2 December 2019 в 03:25
поделиться

Нет, метода selectItem: нет, но есть является методом rowForItem: . Если вы объедините это с советом Питера об использовании selectRowIndexes: byExndingSelection: выше, у вас должна быть вся необходимая информация.

Если вы действительно хотите иметь метод выбора элемента, я бы рекомендовал его вызов setSelectedItem: для единообразия, вы можете написать что-то подобное в категории на NSOutlineView

- (void)setSelectedItem:(id)item {
    NSInteger itemIndex = [self rowForItem:item];
    if (itemIndex < 0) {
        // You need to decide what happens if the item doesn't exist
        return;
    }

    [self selectRowIndexes:[NSIndexSet indexSetWithIndex:itemIndex] byExtendingSelection:NO];
}

Я понятия не имею, работает ли этот код на самом деле; Я просто набросал это, чтобы проиллюстрировать концепцию.

1
ответ дан 2 December 2019 в 03:25
поделиться

Вот как я в итоге оказался. Предложения и исправления всегда приветствуются.

@implementation NSOutlineView (Additions)

- (void)expandParentsOfItem:(id)item {
    while (item != nil) {
        id parent = [self parentForItem: item];
        if (![self isExpandable: parent])
            break;
        if (![self isItemExpanded: parent])
            [self expandItem: parent];
        item = parent;
    }
}

- (void)selectItem:(id)item {
    NSInteger itemIndex = [self rowForItem:item];
    if (itemIndex < 0) {
        [self expandParentsOfItem: item];
        itemIndex = [self rowForItem:item];
        if (itemIndex < 0)
            return;
    }

    [self selectRowIndexes: [NSIndexSet indexSetWithIndex: itemIndex] byExtendingSelection: NO];
}
@end
21
ответ дан 2 December 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: