iOS loadNibNamed zamieszanie, jaka jest najlepsza praktyka?
Jestem zaznajomiony z większością procesu tworzenia XIB dla mojej własnej podklasy UIView, ale nie wszystko działa poprawnie dla mnie - dotyczy to głównie łączenia IBOutlets. Mogę zmusić ich do pracy w sposób, który wydaje się okrężny.
Moje ustawienia to:
Mam MyClass.h i MyClass.m. Mają IBOutlets dla UIView (zwany widokiem) i UILabel (nazywany myLabel). Dodałem własność „view”, ponieważ niektóre przykłady online zdawały się sugerować, że tego potrzebujesz, a to rzeczywiście rozwiązało problem, w którym miałem awarię, ponieważ nie mógł znaleźć właściwości widoku, chyba nawet w klasie nadrzędnej UIView .Mam plik XIB o nazwie MyClass.xib, a jego niestandardową klasą właściciela pliku jest MyClass, która została poprawnie wypełniona po tym, jak moje .h i .m dla tej klasy istniały.Moja metoda inicjowania polega na problemach.
Próbowałem użyć metody 'loadNibNamed' mainBundle NSBundle i ustawić właściciela na 'self', mając nadzieję, że utworzę instancję widoku i automatycznie dopasuję jej gniazda do tych w mojej klasie (wiem jak to zrobić i uważam z nim). Wtedy pomyślałem, że chciałbym uczynić „ja” równym podglądzie przy indeksie 0 w tej stalówce, zamiast robić
self = [super init];
lub coś takiego.
Wyczuwam, że robię tu źle, ale przykłady online mają podobne rzeczy w metodzie init, ale przypisują ten widok podrzędny 0 do właściwości widoku i dodają go jako dziecko - ale czy to nie jest suma dwie instancje MyClass? Jeden zasadniczo niepowiązany z IBOutlets, zawierający instancję potomną MyClass utworzoną przez loadNibNamed? Czy w najlepszym razie nie jest to instancja MyClass z dodatkowym pośrednim UIViewem zawierającym wszystkie IBOutlets, które pierwotnie chciałem jako bezpośrednie dzieci MyClass? Stwarza to niewielką irytację, jeśli chodzi o robienie rzeczy takich jak instanceOfMyClass.frame.size.width, ponieważ zwraca 0, gdy wprowadzony podrzędny UIView zwraca rzeczywisty rozmiar ramki, którego szukałem.
Czy to, co robię źle, to że mam kłopoty z loadNibNamed wewnątrz metody init? Czy powinienem robić coś takiego?
MyClass *instance = [[MyClass alloc] init];
[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:instance options:nil];
Czy tak?
MyClass *instance = [[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:nil options:nil] objectAtIndex:0];
Z góry dziękuję za pomoc.