Mam NSTableView
z kilkoma kolumnami tekstu. Domyślnie dataCell
dla tych kolumn jest instancją klasy Apple NSTextFieldCell
, która wykonuje wszystkie cudowne rzeczy, ale rysuje tekst wyrównany do górnej części komórki i chcę, aby tekst był wyśrodkowany pionowo w komórce.Czy istnieje "właściwy" sposób, aby NSTextFieldCell narysował pionowo wyśrodkowany tekst?
Istnieje wewnętrzna flaga w NSTextFieldCell
, która może być używana do pionowego wycentrowania tekstu i działa pięknie. Jednakże, ponieważ jest to flaga wewnętrzna, jego użycie nie jest usankcjonowane przez Apple i może po prostu zniknąć bez ostrzeżenia w przyszłej wersji. Używam tej flagi wewnętrznej, ponieważ jest prosta i skuteczna. Apple najwyraźniej poświęcił trochę czasu na implementację tej funkcji, więc nie podoba mi się pomysł ponownego jej wdrożenia.
Tak; moje pytanie jest następujące: Jaki jest właściwy sposób implementacji czegoś, co zachowuje się dokładnie jak NStextFieldCell firmy Apple, ale rysuje pionowo wyśrodkowany tekst zamiast wyrównanego do góry?
Dla przypomnienia, oto mój prąd "rozwiązanie":
@interface NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical;
@end
@implementation NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical
{
@try { _cFlags.vCentered = centerVertical ? 1 : 0; }
@catch(...) { NSLog(@"*** unable to set vertical centering"); }
}
@end
wykorzystane w następujący sposób:
[[myTableColumn dataCell] setVerticalCentering:YES];
Nie sądzę, że blok try/catch ma sens w tym przypadku, ponieważ _cflags jest strukturą C, a nie obiektem Objective C. Jeśli ta struktura zostanie zmieniona w przyszłej wersji systemu Mac OS X, może się zdarzyć wiele dziwnych rzeczy, ale żaden wyjątek nie zostanie zgłoszony. –
@Jakob Egger: Prawdopodobnie masz rację. Znalazłem to rozwiązanie w innym miejscu w Internecie i skopiowałem je tak jak jest. –
Powinieneś przyjąć odpowiedź Jakoba Eggera. Kiedy używany jest kod z zaakceptowanej odpowiedzi, powoduje to dziwny błąd podczas edycji 'NSTextFieldCell'. Odpowiedź Jakoba rozwiązuje problem. –