Я хотел бы создать многоразовый контроллер представления UsersViewControllerBase
.
UsersViewControllerBase
расширяет UIViewController
, реализует двух делегатов (UITableViewDelegate
, UITableViewDataSource
) и имеет два представления (UITableView
, UISegmentedControl
)
Цель состоит в том, чтобы унаследовать реализацию UsersViewControllerBase
и настроить сегментированные элементы управления в классе UsersViewController
.
class UsersViewControllerBase: UIViewController, UITableViewDelegate, UITableViewDataSource{
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var tableView: UITableView!
//implementation of delegates
}
class UsersViewController: UsersViewControllerBase {
}
UsersViewControllerBase
присутствует в раскадровке и все розетки подключены, идентификатор указан.
Вопрос в том, как я могу инициировать UsersViewController, чтобы он наследовал все представления и функциональные возможности UsersViewControllerBase
Когда я создаю экземпляр UsersViewControllerBase
, все работает
let usersViewControllerBase = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("UsersViewControllerBase") as? UsersViewControllerBase
Но когда я создаю экземпляр UsersViewController
, я получаю nil
выходов (я создал простой UIViewController
и присвоил ему класс UsersViewController в раскадровке)
let usersViewController = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("UsersViewController") as? UsersViewController
Похоже, представления не наследуются.
Я бы ожидал, что метод init в UsersViewControllerBase
получит контроллер с представлениями и выходами из раскадровки:
class UsersViewControllerBase: UIViewController, UITableViewDelegate, UITableViewDataSource{
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var tableView: UITableView!
init(){
let usersViewControllerBase = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("UsersViewControllerBase") as? UsersViewControllerBase
self = usersViewControllerBase //but that doesn't compile
}
}
И я бы инициализировал UsersViewController
:
let usersViewController = UsersViewController()
Но к сожалению это не работает