2011-11-11 8 views
16

Czy ktoś znalazł jasny, zwięzły przykład lub przewodnik dotyczący sposobu implementacji listy źródłowej za pomocą opartego na widoku NSOutlineView wprowadzonego w Lion? Przyjrzałem się przykładowemu projektowi Apple, ale bez poczucia kierunku i wyjaśnień, trudno mi zrozumieć koncepcję dokładnie tego, jak działają.Przykładowy sposób implementacji opartej na widoku listy źródeł (NSOutlineView) przy użyciu wiązań Cocoa?

Wiem, jak korzystać z doskonałej PXSourceList jako awaryjnego, ale naprawdę chciałbym rozpocząć korzystanie z list źródłowych opartych na widoku, jeśli to w ogóle możliwe.

Odpowiedz

29

Oznaczyłeś to znacznikiem kakao, więc zakładam, że masz na myśli "z wiązaniami". Wziąłem szybki przykład. Rozpocznij od nowego, nie opartego na dokumencie, szablonu aplikacji kakao w Xcode. Nazwij to, co chcesz. Najpierw dodałem trochę kodu, aby sfałszować dane, z którymi się wiąże. Oto co mój nagłówek AppDelegate wygląda następująco:

#import <Cocoa/Cocoa.h> 

@interface SOAppDelegate : NSObject <NSApplicationDelegate> 

@property (assign) IBOutlet NSWindow *window; 

@property (retain) id dataModel; 

@end 

A oto co moja realizacja AppDelegate wygląda następująco:

#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 

Nie ma szczególne znaczenie dla fałszywej struktury danych stworzyłem, po prostu chciał pokazać coś z kilka podpoziomów itp. Jedyne, co ma znaczenie, to że ścieżki kluczy określone w powiązaniach w Konstruktorze interfejsów są zgodne z kluczami w danych (w tym przypadku fałszywe dane).

Następnie wybierz MainMenu.xib fil mi. W edytorze IB, wykonaj następujące kroki:

  1. użyć obiektu Biblioteka (Ctrl-Cmd-Opt-3), aby dodać NSTreeController do .xib.
  2. Wybierz NSTreeController, a za pomocą Inspektora właściwości (Cmd-Opt-4) ustawić Kluczowe Ścieżki> Dzieci do children (w tym przykładzie, dla danych, powinno to być cokolwiek zwraca tablicę obiektów podrzędnych.)
  3. przy NSTreeController nadal zaznaczona, należy użyć wiązania Inspector (CMD-Opt-7) w celu związania zawartość Array do AppDelegate z modelu Key ścieżce dataModel
  4. Następny użyć Object Library (Ctrl-Cmd- Opt-3), aby dodać widok NSOutlineView do twojego .xib.
  5. Ułóż według własnego uznania w oknie (zazwyczaj na całej wysokości okna, równo z lewą stroną).
  6. Wybierz NSOutlineView (pamiętaj, że po pierwszym kliknięciu, prawdopodobnie wybrałeś NSScrollView, który go zawiera, kliknij go po raz drugi, a przejdziesz do samego widoku NSOutlineView. Zauważ, że jest to DUŻY łatwiejsze, jeśli poszerzysz obszar po lewej stronie edytora IB, gdzie znajdują się wszystkie obiekty - - pozwala to zobaczyć obiekty jako drzewa, nawigować i wybierać je w ten sposób.)
  7. użyciu atrybutów Inspector (Cmd aktywacyjne 4) ustalają NSOutlineView:
    • tryb zawartość: View Based
    • kolumny: 1
    • Highlight: Source List
  8. Korzystanie z Inspektora powiązań (Cmd-Opt-7) powiązanie "Co ntent "to" Tree Controller ", klucz kontrolera: arrangedObjects (To jest, gdzie zachowanie opartych na widoku NSTableView/NSOutlineViews zaczyna odbiegać od tych opartych na NSCell)
  9. Na liście obiektów (wymienionych w punkcie 6) rozwiń zobacz hierarchię widoku NSOutlineView i wybierz Static Text - Table View Cell.
  10. Używanie Wiązania Inspector (CMD-Opt-7) wiążą Wartość do Table Cell View, model Key Ścieżka: objectValue.itemName (Użyłem itemName w fałszywych danych, to będzie chciał wykorzystać dowolny klawisz odzwierciedlał nazwę swojego elementy danych)

Zapisz. Biegać. Powinieneś zobaczyć listę źródeł, a po Rozszerzyliśmy węzły z dziećmi, można zobaczyć coś takiego:

enter image description here

Jeśli jesteś w programie firmy Apple Developer, należy mieć dostęp do WWDC 2011 Videos. Jest jeden specjalnie dedykowany do pracy z NSTableView opartym na widoku (i NSOutlineView) i obejmuje on dość dokładne pokrycie powiązań.

Nadzieję, że pomaga!

+1

FYI w 2011 roku wideo WWDC jest sesja zatytułowana 120 Zobacz Based NSTableView. – jemeshsu

+1

Dla tych, którzy używają tego: również rozważyć: http://stackoverflowflow.com/questions/7095703/binding-view- based-nsoutlineview-to-core-data – bijan

+0

Czy ten sposób może działać również w Leopard i Snow Leopard? – arufian

Powiązane problemy