Obecnie próbuję użyć nowego widoku opartego na widoku NSOutlineView w mojej aplikacji Cocoa. Ponieważ nie używam wiązań, więc zaimplementowałem wszystkie wymagane metody delegatów i źródeł danych w moim kontrolerze.Wyświetlane problemy z czcionką nagłówka NSOutlineView
interfejs konstruktora Dodałem NSOutlineView z podświetlaniem ustawionym na SourceList i trybem ustawionym Content Based View. Zatem były dwa widoki komórkowe domyślna tabela przewidziane (jedna komórka nagłówka z HeaderCell zestawu jako identyfikator i jednej komórki danych z Datacell zestawu jako identyfikator)
To jak to wygląda w konstruktora interfejsu, poglądów komórek nagłówka poprawnie wyświetlić szaroniebieski textField natomiast poglądy komórkowe dane mają widok obrazu i textField z poprawnych ustawień kolorów i czcionek
przedstawienie poglądów, używam następujący kod, aby powrócić do DataCell- widok lub widok HeaderCell - zestaw i zestaw textField komórki odpowiednio, w oparciu o odpowiedni identyfikator ustawiony w konstruktorze interfejsów.
- (NSView *)outlineView:(NSOutlineView *)outlineView
viewForTableColumn:(NSTableColumn *)tableColumn
item:(id)item {
NSTableCellView *result = nil;
if ([item isKindOfClass:[NSMutableDictionary class]]) {
result = [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];
id parentObject = [outlineView parentForItem:item] ? [outlineView parentForItem:item] : groupedRoster;
[[result textField] setStringValue:[[parentObject allKeys] objectAtIndex:0]];
} else {
result = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
[item nickname] ? [[result textField] setStringValue:[item nickname]] : [[result textField] setStringValue:[[item jid] bare]];
}
return result;
}
Działa wszystko, co wygląda następująco.
Czy ktoś może mi podpowiedzieć, dlaczego komórka nagłówka nie jest pogrubiona ani prawidłowo zabarwiona, jeśli wybrana?
wielki, dzięki, to było dokładnie to, czego szukałem. Jeśli ktoś inny napotka problem, użyj setFloatsGroupRows: NO, aby zapobiec przeskakiwaniu * pierwszego i drugiego elementu grupy podczas rozwijania i zwijania zgodnie z [tym wpisem] (http: // stackoverflow.com/questions/6814620/strange-behaviure-using-view-based-nsoutline-sourcelist) – BinaryBucks
Podczas gdy jestem teraz i wszystko poprawnie wyświetlane powyższy kod działa tak naprawdę nie działa płynnie podczas rozwijania/zwijania grupy takiej jak to jest na przykład w przypadku Znalazca. W animacji jest zawsze niewielkie, ale godne uwagi jąkanie i dość duże obciążenie procesora, tak jakby widok był nowo przydzielony. Jeśli po prostu używam makeViewWithIdentifer z pojedynczym identyfikatorem, tak że każda komórka jest komórką nagłówka (lub komórką danych, która nie ma znaczenia), wszystko działa płynnie. Jakąkolwiek wskazówkę dlaczego? – BinaryBucks
Tak, cała właściwość floatsGroupRows jest po prostu uszkodzona dla widoków konspektu. Nie widzisz problemu z wydajnością, który opisujesz. Może regresja rdzenia animacji z superwidoku opartego na warstwach? Dunno. –