Mam niestandardową klasę UIView
o nazwie MyView
, której używam razem z UIViewController
skonfigurowanym za pomocą scenorysu. Większość właściwości widoku jest konfigurowana za pomocą Konstruktora interfejsu; jednak muszę dostosować kilka obrazów programowo przed ustawiając je jako tła dla mojego przycisku, tak:Dopasowywanie UIView po załadowaniu z serii ujęć
-(void)setupVisuals {
UIImage *image = [[UIImage imageNamed:@"myButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)];
// _myButton is an IBOutlet property set through the storyboard:
[_myButton setBackgroundImage:image forState:UIControlStateNormal];
}
Problemem jest to, że nie mogę zadzwonić [self setupVisuals]
z inicjatora *, ponieważ _myButton
jest nil
w ten czas.
I rozwiązać problem przez dodanie tej linii do MyViewController
„s viewDidLoad:
[(MyView*)self.view setupVisuals];
Z tego połączenia w miejscu, wszystko działa bez zarzutu. Jednak wydaje się to raczej rozwiązaniem, niż rozwiązaniem tego, co prawdopodobnie jest stosunkowo częstym problemem.
Czy istnieje metoda nadpisania lub inny mechanizm służący do zakończenia inicjowania wizualizacji MyView
bez wciskania w mechanizm viewDidLoad:
?
* W tym przypadku, inicjator jest
initWithCoder:
ponieważ widok jest ładowany z ujęć. Sprawdziłem, czy inicjator został poprawnie wywołany, ale wizualizacje nie są jeszcze gotowe.
IIRC 'initWithFrame:' jest wywoływane nawet przy ładowaniu z NIB/XIB. Stamtąd, po wywołaniu "super", nie możesz tego zrobić? Pamiętam, że miałem podobny problem i rozwiązałem go, ale nie pamiętam dokładnie, jak dokładnie to było. –
W takich przypadkach zwykle po prostu wykonuję "inicjalizację" w 'viewWillAppear', ale jeśli istnieje lepszy sposób na obsłużenie go, chciałbym to wiedzieć. Zasadniczo, kiedy widok jest wczytywany z storyboardu z nienaruszonymi wszystkimi jego punktami sprzedaży? –
Czy wypróbowałeś tylko [self.myView setupVisuals] z metody viewWillAppear w swoim kontrolerze viewController? Jeśli zainicjowałeś ten widok w IB i ustawiłeś go jako gniazdko, to powinno działać. –