Mam prostą aplikację, która zawiera listę modeli w NSTableView
.Programowe dodawanie kolumn (z powiązaniami) do opartego na widoku NSTableView?
Tabela jest całkowicie standardową, opartą na widoku tabelą z kilkoma kolumnami i jest wypełniana przez NSArrayController
za pomocą powiązań. Wszystko to jest skonfigurowane w Interface Builder i działa zgodnie z oczekiwaniami.
Teraz chciałbym dodać programowo więcej kolumn, a te nowe kolumny będą wiązały się z różnymi klawiszami w modelach. I tam utknąłem.
Dla uproszczenia przyjmijmy, że to ustawienie:
- Przedmiotem modelu są jasne obiekty z tylko jednej nieruchomości NSString:
name
- AppDelegate ma właściwość NSArray (
models
) posiadająca numer modelu instancje. - Urządzenie NSArrayController's
content
jest przypisane do macierzy delegata aplikacjimodels
. - NSTableView's
content
jest związany zarrangedObjects
kontrolera macierzy. - tabeli w pierwszej kolumnie jest związana (w IB), aby wyświetlić właściwość
name
, czyli kolumna → komórka tabeli Widok → tekst statyczny widok tabeli komórka → wartość jest zobowiązany do widoku komórka tabeli na objectValue.name
Jest to, o ile wiem, proste i zgodne z książką, i działa jak urok.
Ale ... jak dodać więcej kolumn?
Aby dodać kolumny programowo (keep it simple, powiedzmy, ta nowa kolumna powinna również prostu wyświetlić właściwość name
, podobnie jak kolumny, która już tam jest), wyobrażam sobie, że zrobię coś takiego w Aplikacja pełnomocnik:
NSTableColumn* newColumn = [[NSTableColumn alloc] initWithIdentifier:@"newColumn"];
// do binding magic somehow
// [[newColumn dataCell] bind:NSValueBinding toObject:??? withKeyPath:??? options:nil];
[self.table addColumn:newColumn]; // the table's connected with an IBOutlet
próbowałem wiele kombinacji wiązania z/na komórce danych, w tabeli w kolumnie, sterownik tablicowy sama tablica, jak również wszelkiego rodzaju keypaths, ale nic nie działa. Nowa kolumna została dodana poprawnie, ale nigdy nie jest wypełniona.
Wyobrażam sobie, że podstawowa instancja NSTableColumn, którą utworzę, jest oparta na komórkach, a nie na widoku i powoduje problemy. Jednak nie mam pojęcia, jak przejść dalej, a doktorzy nigdy nie mówią o wiążących kolumnach, które zostały dodane programowo.
W tym przypadku wszystko, czego chcę, to prosta kolumna tekstowa, powiązana z modelem, dokładnie taka, jak ta, którą mogę łatwo skonfigurować IB.
Mogłem to wszystko zrobić, wprowadzając NSTableViewDataSource
i "ręcznie" karmienie stołu, ale mam już wszystko inne skonfigurowane z wiązaniami.
Każda pomoc zostanie bardzo doceniona.
Niestety, nie działa; spróbował tego. Wiązanie kolumny działa tylko dla tabel opartych na komórkach. Nie tabele oparte na widoku. – Flambino