Подтвердить что ты не робот

Как подключиться к IBOutlet или IBAction в базовом классе

У меня есть класс контроллера базового представления, который наследует от UIViewController и унаследованный класс от базового класса viewcontroller. Теперь у меня есть наконечник, владельцем файла которого является унаследованный класс, но все мои действия и выходы находятся в базовом классе. Возможно ли связать действие \outlet в файле nib с базовым классом?

4b9b3361

Ответ 1

В основном я объясню это пример:

Определите базовый класс (позвоните ему BaseViewController) и назначьте ему UITableView IBoutlet в файле .h:

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

Определите два дочерних класса (т.е. FirstChildViewController и SecondChildViewController):

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

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

Теперь для того, чтобы либо (или оба) дочерние классы использовали iboutlet базового класса, просто перетащите реферируемую розетку в определение свойства в файле базового класса .h и..!

enter image description here

здесь - это полный проект, который иллюстрирует это.

Ответ 2

Два способа сделать это:

1)

делать это программно (т.е. в коде)

Сначала объявите свои выходы в базовом классе.

а затем назначьте свои выходы через код в своем унаследованном классе.

и

2)

Вы также можете назначить свои точки и действия в своем XIB файле. Xcode знает о наследуемых выходах и действиях из базовых классов.

Ответ 3

Если базовый класс находится в структуре Swift, то иногда Xcode 7 не увидит выходы, даже если базовый класс и его точки доступа являются общедоступными. В этом случае обходной путь выглядит следующим образом:

  • В IB установите элемент управления для использования базового класса
  • Подключите выходы
  • В IB установите элемент управления для использования производного класса

IB покажет "!" рядом с выходами, как если бы они отсутствовали, но во время выполнения ошибок не будет.

Если у кого-то есть лучшее обходное решение, дайте мне знать!