2012-04-18 13 views
20

Mam podstawową klasę kontrolera widoku, która dziedziczy po klasie UIViewController i odziedziczonej klasie z klasy podstawowej viewcontroller. Teraz mam stalówkę, której właściciel pliku jest odziedziczoną klasą, ale wszystkie moje akcje i punkty sprzedaży znajdują się w klasie bazowej. Czy jest możliwe nawet połączenie akcji \ outlet w pliku końcówki z klasą podstawową?jak połączyć się z IBOutlet lub IBAction w klasie bazowej

+0

Tak. Czy wszystkie twoje pliki znajdują się w tym samym projekcie w Xcode? – wbyoung

Odpowiedz

29

będę zasadzie wyjaśnić przez example:

Zdefiniuj klasę bazową (nazwijmy go BaseViewController) i przypisać go do UITableView IBOutlet w pliku .h:

// BaseViewController.h 
@interface BaseViewController : UIViewController  
@property (weak, nonatomic) IBOutlet UITableView *tableView;  
@end 

zdefiniować dwa dzieci klas (tj FirstChildViewController i SecondChildViewController):

// FirstChildViewController.h 
@interface FirstChildViewController : BaseViewController 
@end 

// SecondChildViewController.h 
@interface SecondChildViewController : BaseViewController 
@end 

się, aby mieć albo (lub oba) do childre n klasy używają iboutlet klasy bazowej, po prostu przeciągnij referencing do definicji właściwości w pliku klasy base .h ... i to wszystko!

enter image description here

here to kompletny projekt, który ilustruje to.

+3

hmm .. to chyba nie działa dla skutera –

7

dwa sposoby, aby to osiągnąć:

1)

zrobić to programowo (to znaczy w kodzie)

Najpierw zadeklarować swoje placówki w klasie bazowej.

a następnie przypisz swoje placówki za pośrednictwem kodu w odziedziczonej klasie.

i

2)

Można także przypisać placówek i działań w pliku XIB. Xcode wie o odziedziczonych punktach sprzedaży i działaniach z klas bazowych.

4

Jeśli klasa bazowa jest w strukturze Swift, to czasami Xcode 7 nie będzie widzieć gniazdek, nawet jeśli klasa bazowa i jej punkty sprzedaży są publiczne. W tym przypadku, gdy obejście jest następujący:

  1. w IB ustawienia po użyciu podstawową klasę
  2. Połączyć wyloty
  3. w IB ustawienia po użyciu klasy pochodnej

IB wyświetli "!" obok gniazdek, jakby ich brakowało, ale nie wystąpią błędy w czasie wykonywania.

Jeśli ktoś ma lepsze rozwiązanie, daj mi znać!

+0

Czy możesz wyjaśnić nieco bardziej szczegółowo, jak to zrobić? – c0d3Junk13

+0

@ c0d3Junk13: Otwórz scenorys. Pokaż inspektora tożsamości. Wybierz kontrolę. Ustaw swoją klasę na klasę podstawową. Podłącz gniazda.Wybierz tę samą kontrolę i ustaw klasę na klasę pochodną. Zignoruj ​​ostrzeżenia. – phatmann

+0

hmm .. to wydaje się hackish .. jest dozwolone? czy jest to coś, co później pęknie na –

Powiązane problemy