Jest to dość prosty naprawdę, gdy się go zrozumieć (oczywiście!). Nie możesz użyć NSArray bezpośrednio jako źródła tabeli. Musisz utworzyć niestandardowy obiekt, który implementuje protokół NSTableViewDataSource lub zaimplementować ten protokół w istniejącej klasie - zazwyczaj kontroler. Jeśli użyjesz Xcode do stworzenia standardowej aplikacji opartej na dokumencie, klasa kontrolera dokumentu - (będzie się nazywać MyDocument) jest dobrą klasą do użycia.
Trzeba wdrożyć przynajmniej te dwie metody:
– numberOfRowsInTableView:
– tableView:objectValueForTableColumn:row:
Jeśli masz zmienny tablicę, której wartości chcesz użyć w widoku tabeli z jednej kolumny, coś jak następujące powinien zrobić jak start:
– numberOfRowsInTableView: (NSTableView*) aTableView
{
return [myMutableArray count];
}
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
return [myMutableArray objectAtIndex: rowIndex];
}
To właśnie przyszło mi do głowy, że można dodać powyższe dwie metody jako kategoria do NSArray zastępując myMutableArray
z self
a następnie można użyć tablicę jako źródła danych.
W każdym razie, z zmienny tablicy, ważne jest, że za każdym razem gdy go zmienić, trzeba pozwolić widok tabeli wiedzieć, że został zmieniony, więc trzeba wysłać widok tabeli -reloadData
.
Jeśli widok tabeli ma więcej niż jedną kolumnę i chcesz, aby wypełnić go z właściwości obiektów w tablicy, istnieje trik można zrobić, aby ułatwić sobie.Powiedzmy obiektów w tablicy są instancjami klasy o nazwie Person z dwóch metod określonych:
-(NSString*) givenName;
-(NSString*) familyName;
i chcesz, aby Twój widok tabeli mieć kolumnę dla każdego z nich, można ustawić właściwość każdej kolumny identifier
do nazwy obiektu osobiście, że wyświetla kolumny i użyć coś jak poniżej:
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
Person* item = [myMutableArray objectAtIndex: rowIndex];
return [item valueForKey: [tableColumn identifier]];
}
Jeśli zastąpić valueForKey:
z valueForKeyPath:
i klasa Osoba ma również następujące metody:
-(Person*) mother;
-(Person*) father;
-(NSString*) fullName; // concatenation of given name and family name
można dodać kolumny tabeli z identyfikatorami takimi jak: father.fullName
lub mother.familyName
, a wartości zostaną automatycznie wypełnione.
ten link nie działa! proszę zaktualizuj to! – elin3t