2012-12-21 13 views
17

Jestem nowy w scenorysie. Kiedyś robiłem mój widok za pomocą kodu. Mam pytanie.Obsługa kontrolera widoku z dziedziczonym widokiem

stworzyłem kontroler widoku

@interface FunctionViewController : UIViewController 

I muszę używać mojego kodu, aby dodać

  1. pełny przycisk ekranu (alfa: 0,5)
  2. widok popup-jak w środku (nie na pełnym ekranie)

Potem stworzyłem kolejny Viewcontroller

@interface PlayFunctionViewController : FunctionViewController 

i dodać kilka opinii na temat podręcznego podobny widok

Chcę odtworzyć te rzeczy za pomocą ujęć.

W jaki sposób mogę je zbudować przy użyciu kreatora interfejsu i scenorysu, aby nie trzeba było układać przycisku pełnego ekranu i widoku podobnego do wyskakującego w każdej podklasie funkcji FunctionViewController?

+0

Jest to oparta na numerze liczba odpowiedzi, którą zaakceptowałeś ... –

+0

Jeśli tworzysz układ w narzędziu do budowania interfejsów, będziesz musiał całkowicie rozplanować każdy kontroler widoku, ponieważ musisz połączyć "IBOutlet" dla każdego z nich.Jeśli chcesz mieć elementy, które pojawią się w kontrolce widoku i wszystkich jego podklasach, utwórz je programowo w metodzie 'viewDidLoad'. – Greg

+0

PartiallyFinite - niezupełnie, może użyć Tag - '[self viewWithTag: 100]' – Quver

Odpowiedz

7

Nie można dziedziczyć układu superklasy w podklasie w scenorysie, tj. Jeśli wizualnie rozmieszczamy elementy w kontrolce widoku w storyboardie i łączymy je z kodem, podklasami tego kontrolera widoku, a nawet innymi wystąpienia tej samej klasy, będą musiały zostać określone indywidualnie i nie zostaną automatycznie uzupełnione ani zaktualizowane.

Innymi słowy, w serii ujęć trzeba ręcznie ułożyć i połączyć wszystkie elementy interfejsu w każdej poszczególnej instancji i podklasie dodanej do scenorysu. Daje to elastyczność polegającą na wielokrotnym korzystaniu z wielu instancji tej samej klasy w całej aplikacji i układaniu ich w inny sposób, ale nie daje możliwości dziedziczenia układów.

Jeśli chcesz dziedziczyć układ w podklasach, programuj programowo w viewDidLoad swojej superklasy, a następnie wszystkie twoje podklasy będą miały te elementy interfejsu, nawet jeśli zaprojektujesz je i ułożysz w swoim scenorysie (nie będą widoczne w serii ujęć, ale pojawią się, gdy skompilujesz i uruchomisz swoją aplikację).


Zasadniczo, jeśli chcesz mieć elementy interfejsu, które są takie same w klasie i wszystkie podklasy, tworzyć je programowo i będą występować we wszystkich przypadkach i instancji podklasy, nawet jeśli tworzysz i projektowania same instancje w twoim scenopisie.

Można łączyć kod i scenorys, dzięki czemu można tworzyć niektóre elementy w scenorysie, ale inne, które muszą być obecne we wszystkich instancjach i podklasach, w kodzie.

+0

Czy można to w jakiś sposób wykonać za pomocą stalówki? Ustawiłem widoki przy pomocy autolayout ze wszystkimi ograniczeniami. Byłoby z pewnością odziedziczyć to we wszystkich podklasach. – guptron

+0

@sguptaet Niestety nie. Wpadłem na to sam kilka razy i skończyłem kopiowanie i wklejanie kontrolera widoku lub dodawanie dodatkowych bitów w kodzie. – Greg

+0

Nie zgadzam się, jeśli zainicjujesz kontroler widoku z pliku nib, może on zostać odziedziczony, w tym ograniczenia związane z autolayout. Wykonałem prototyp na iOS 7 i 8. – Wingzero

0

Wpadłem na podobny problem i chociaż było to czasochłonne, ale stworzenie delegata i ponowne użycie go w wielu kontrolerach widoku było znacznie lepszym rozwiązaniem. Chociaż to bije cały punkt "Dziedziczenia".

Powiązane problemy