У меня есть класс контроллера базового представления, который наследует от UIViewController
и унаследованный класс от базового класса viewcontroller
. Теперь у меня есть наконечник, владельцем файла которого является унаследованный класс, но все мои действия и выходы находятся в базовом классе. Возможно ли связать действие \outlet в файле nib с базовым классом?
Как подключиться к IBOutlet или IBAction в базовом классе
Ответ 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 и..!
здесь - это полный проект, который иллюстрирует это.
Ответ 2
Два способа сделать это:
1)
делать это программно (т.е. в коде)
Сначала объявите свои выходы в базовом классе.
а затем назначьте свои выходы через код в своем унаследованном классе.
и
2)
Вы также можете назначить свои точки и действия в своем XIB файле. Xcode знает о наследуемых выходах и действиях из базовых классов.
Ответ 3
Если базовый класс находится в структуре Swift, то иногда Xcode 7 не увидит выходы, даже если базовый класс и его точки доступа являются общедоступными. В этом случае обходной путь выглядит следующим образом:
- В IB установите элемент управления для использования базового класса
- Подключите выходы
- В IB установите элемент управления для использования производного класса
IB покажет "!" рядом с выходами, как если бы они отсутствовали, но во время выполнения ошибок не будет.
Если у кого-то есть лучшее обходное решение, дайте мне знать!