创建后如何更改 ViewController 的类型?
Posted
技术标签:
【中文标题】创建后如何更改 ViewController 的类型?【英文标题】:How can I change the type of a ViewController after creation? 【发布时间】:2012-02-18 10:00:49 【问题描述】:我有一个程序可以根据在 UITableView 中选择的行在 UISplitView 中创建 UIViewControllers。例如,如果用户单击名为“settings”的行,程序会创建一个名为 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'。
如何在运行时更改这些 ViewController 的类?
【问题讨论】:
【参考方案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
或
((SettingsTableViewController *)leftController).masterVC = self;
((SettingsDetailViewController *)rightController).tableVC = leftController;
您已正确创建对象,但是当您为它们分配 UIViewController
指针对象类型时,编译器不知道您的对象属于您的自定义类。
【讨论】:
以上是关于创建后如何更改 ViewController 的类型?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中更改 ViewController 类的名称的正确方法是啥?