Как я могу изменить тип ViewController после создания? - PullRequest
0 голосов
/ 18 февраля 2012

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

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

Е.Г.

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

Затем в didSelectRowAtIndexPath:

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

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

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

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

1 Ответ

0 голосов
/ 18 февраля 2012

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

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

или

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

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

...