В первую очередь, я плохо знаком с разработкой какао, таким образом, я предполагаю, что, вероятно, пытаюсь сделать это неправильный путь, но здесь иду:
У меня есть a NSOutlineView
который загружает данные из a NSOutlineViewDataSource
реализация. Я хочу, чтобы все объекты были расширены после того, как они загружаются, но я, может казаться, не нахожу событие запущенным, когда данные закончили загружаться, таким образом, я могу отправить a [outlineView expandItem: nil expandChildren: YES]
к нему.
Я изучил NSOutlineViewDelegate
протокол, но я не мог найти подходящее место для этого вызова. Каков был бы лучший подход для этой проблемы?
Я нашел ответ. Похоже, что реализация метода делегата - (void) outlineView: (NSOutlineView *) OutlineView willDisplayCell: (id) cell forTableColumn: (NSTableColumn *) tableColumn item: (id) item
будет делать трюк:
-(void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
{
[outlineView expandItem:item];
}
Вот как я обычно с этим справляюсь. Я предпочитаю показывать свое главное окно самому, а не позволять этому открываться автоматически. Это позволяет мне убедиться, что все элементы интерфейса настроены так, как я хочу, прежде чем я покажу пользователю окно. Кажется, ты тоже можешь это сделать. Итак, сначала я снимаю флажок «Видимо при запуске» в построителе интерфейса для окна. Затем в классе делегата моего приложения я использую этот метод, который является методом удаления NSApplication:
Там я настраиваю элементы интерфейса, потому что в этот момент я знаю, что все загружено . И последняя строка этого метода будет: [myWindow makeKeyAndOrderFront: self] ;. Таким образом, вы знаете, что ваше окно идеально, еще до того, как пользователь увидит его. Так что я бы попробовал ваш метод там.