Вы пометили это тегом привязки какао, поэтому я предполагаю, что вы имеете в виду «с привязками».Я быстро привел пример.Начните с нового не основанного на документе шаблона Приложения Какао в XCode.Называй как хочешь.Сначала я добавил код, чтобы сделать поддельные данные для привязки.Вот как выглядит мой заголовок AppDelegate:
#import <Cocoa/Cocoa.h>
@interface SOAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (retain) id dataModel;
@end
А вот как выглядит моя реализация AppDelegate:
#import "SOAppDelegate.h"
@implementation SOAppDelegate
@synthesize window = _window;
@synthesize dataModel = _dataModel;
- (void)dealloc
{
[_dataModel release];
[super dealloc];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
// Make some fake data for our source list.
NSMutableDictionary* item1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 1", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.1", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_2_1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2.1", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_2_2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2.2", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item3 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 3", @"itemName", [NSMutableArray array], @"children", nil];
[[item2_2 objectForKey: @"children"] addObject: item2_2_1];
[[item2_2 objectForKey: @"children"] addObject: item2_2_2];
[[item2 objectForKey: @"children"] addObject: item2_1];
[[item2 objectForKey: @"children"] addObject: item2_2];
NSMutableArray* dataModel = [NSMutableArray array];
[dataModel addObject: item1];
[dataModel addObject: item2];
[dataModel addObject: item3];
self.dataModel = dataModel;
}
@end
Нет особого значения для созданной мной поддельной структуры данных, я просто хотелпоказать что-то с парой подуровней и т. д. Единственное, что имеет значение, это то, что пути ключей, которые вы указываете в привязках в Интерфейсном Разработчике, совпадают с ключами в ваших данных (в данном случае это фальшивые данные).
Затем выберите файл MainMenu.xib
.В редакторе IB выполните следующие действия:
- Используйте библиотеку объектов (Ctrl-Cmd-Opt-3), чтобы добавить NSTreeController к вашему
.xib
. - ВыберитеNSTreeController и с помощью Инспектора атрибутов (Cmd-Opt-4) установите Ключевые пути> Дети в
children
(для этого примера; для ваших данных это должно быть то, что возвращает массив дочерних объектов.) - Когда NSTreeController все еще выбран, используйте Инспектор привязок (Cmd-Opt-7), чтобы связать массив содержимого с AppDelegate, с ключом модели ключа
dataModel
- Затем используйте библиотеку объектов (Ctrl-Cmd-Opt-3), чтобы добавить NSOutlineView к вашему
.xib
. - Расположите его так, как вам удобно внутри окна (обычно на всю высоту окна,вровень с левой стороной)
- Выберите NSOutlineView (обратите внимание, что при первом нажатии на него вы, вероятно, выбрали NSScrollView, в котором он содержится. Нажмите на него во второй раз, и вы просверлиливниз в НСОуСам tlineView.Обратите внимание, что это НАМНОГО проще, если вы расширяете область слева от редактора IB, где находятся все объекты - это позволяет вам видеть объекты в виде дерева, а также перемещаться и выбирать их таким образом.)
- С помощью Инспектора атрибутов (Cmd-Opt-4) установите NSOutlineView:
- Режим содержимого :
View Based
- Столбцы :
1
- Выделение :
Source List
- Использование инспектора привязок (Cmd-Opt-7) связать «Содержимое»в «Tree Controller», ключ контроллера: layoutObjects (здесь поведение NSTableView / NSOutlineViews на основе вида начинает отличаться от NSCell)
- В списке объектов (указан в # 6) развернитепросмотрите иерархию NSOutlineView и выберите
Static Text - Table View Cell
. - С помощью Инспектора привязок (Cmd-Opt-7) связать Значение до
Table Cell View
, Путь к ключу модели: objectValue.itemName
(Я использовал itemName
в фальшивых данных, вы бы хотели использовать любой ключ, соответствующий названию ваших элементов данных)
Сохранить.Запустить.Вы должны увидеть список источников, и как только вы расширили узлы дочерними элементами, вы можете увидеть что-то вроде этого:
Если вы находитесь в Программе разработчиков Apple,у вас должна быть возможность доступа к WWDC 2011 Videos .Одна из них специально предназначена для работы с NSTableView на основе View (и NSOutlineView) и включает в себя довольно тщательный охват привязок.
Надеюсь, это поможет!