Rozszerzyliśmy UILabel, aby móc stosować standardowe czcionki i kolory dla wszystkich zastosowań danego typu etykiety w naszych aplikacjach. Na przykład.UIAppearance nie przynosi efektu na programach UILabel utworzonych programowo
@interface UILabelHeadingBold : UILabel
@end
W naszej AppDelegate stosujemy czcionek i kolorów jak ten
[[UILabelHeadingBold appearance] setTextColor:<some color>];
[[UILabelHeadingBold appearance] setFont:<some font>];
Dodając UILabel w naszych XIb, możemy teraz wybrać klasę być typu UILabelHeadingBold i działa zgodnie z oczekiwaniami . Etykieta jest wyświetlana z poprawną czcionką i kolorem, zgodnie z opisem w naszym AppDelegate.
Jeśli jednak utworzymy etykietę programowo, np.
UILabelHeadingBold *headingLabel = [[UILabelHeadingBold alloc] initWithFrame:CGRectMake(10, 10, 100, 30)];
[self.mainView addSubview:headingLabel];
UILabel nie otrzymuje oczekiwanej czcionki/koloru. Musimy ręcznie zastosować te atrybuty.
Czy istnieje sposób, aby UIAppearance zadziałał na programowo stworzonych elementach interfejsu użytkownika, czy działa tylko wtedy, gdy jest używany w XIB-ach?
To * nie * czasami pracować UILabels utworzonych w kodzie też, ale wyniki są niespójne, a zachowanie jest inne między iOS 5 i, no cóż, wiesz. Więc po prostu nie używaj 'UIAppearance' do dostosowywania' UILabel's –
+1 dla informacji, że nie jestem jedyny, który dostaje niespójne wyniki (zabrało mi godziny kodowania, dopóki nie znalazłem twojego komentarza). +1 dla rozwiązania robert.wijas - którego używam teraz - i wszystko jest w porządku. – anneblue