我有一个程序在UISplitView中创建UIViewControllers,具体取决于在UITableView中选择哪一行。例如,如果用户单击名为“settings”的行,程序将创建一个名为settingsTableVC的视图控制器(显示在UISplitViewController的左侧窗格中)和一个名为settingsDetailVC的详细视图控制器,该控制器显示在右侧窗格中
逻辑工作正常,但我在初始tableView中的每一行都有很多代码,用于创建和设置每个ViewController及其公共属性,在我看来,更简单的方法是定义两个通用的ViewControllers ,然后将它们转换为方法中的正确类型。这样,我可以一般地定义它们的公共属性(因为它们基本上都是相同的属性,指向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'。
如何在运行时更改这些ViewControllers的类?
答案 0 :(得分:0)
您可以执行以下任一操作:
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
指针对象类型时,编译器不知道您的对象属于您的自定义类。