创建后如何更改 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 的类型?的主要内容,如果未能解决你的问题,请参考以下文章

从不同的类更改 UIButton alpha

如何继续下一个 viewController

Splash 完成后更改 ViewController

在 Swift 中更改 ViewController 类的名称的正确方法是啥?

在Swift中更改ViewController后禁用任务栏?

关于如何修复错误“找不到名为 viewcontroller 的类的任何信息”的建议