Как я могу изменить тип ViewController после создания?

У меня есть программа, которая создает UIViewControllers в UISplitView в зависимости от того, какая строка выбрана в UITableView. Например, если пользователь щелкает строку под названием «Настройки», программа создает контроллер представления с именем settingsTableVC (который отображается на левой панели UISplitViewController) и контроллер подробного представления с именем settingsDetailVC, который отображается на правой панели. .

Логика работает нормально, но у меня есть много кода для каждой строки в исходном tableView, для создания и настройки каждого ViewController и их общедоступных свойств, и мне кажется, что более простым способом было бы определить два общих ViewController, а затем выполнить приведение их к правильному типу в методе. Таким образом, я могу определить их общедоступные свойства в общем (поскольку все они в основном являются одними и теми же свойствами, указателями на masterViewController и tableViewController)

E.G.

UIViewController *leftController = nil;
UIViewController *rightController = nil;'

Затем в didSelectRowAtIndexPath:

leftController = [[SettingTableViewController alloc]init];
rightController = [[SettingsDetailViewController alloc]init];

leftController.masterVC = self;
rightController.tableVC = leftController;

Однако компилятор предупреждает: «UIViewController не объявляет свойство masterVC».

Как я могу изменить класс этих ViewController во время выполнения?


person Skybird    schedule 18.02.2012    source источник


Ответы (1)


Вы можете сделать одно из следующих действий:

SettingsTableViewController *leftControllerCasted = (SettingsTableViewController *)leftController;
SettingsDetailViewController *rightControllerCasted = (SettingsDetailViewController *)rightController;
leftControllerCasted.masterVC = self;
rightControllerCasted.tableVC = leftController; // Doesn't matter if you assign it to leftController or leftControllerCasted

or

((SettingsTableViewController *)leftController).masterVC = self;
((SettingsDetailViewController *)rightController).tableVC = leftController;

Вы правильно создали свои объекты, но поскольку вы назначаете им тип объекта указателя UIViewController, компилятор не знает, что ваши объекты относятся к вашему пользовательскому классу.

person jrtc27    schedule 18.02.2012