【问题标题】:How can I change the type of a ViewController after creation?创建后如何更改 ViewController 的类型?
【发布时间】: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 的类?

【问题讨论】:

    标签: xcode uiviewcontroller uisplitviewcontroller


    【解决方案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 指针对象类型时,编译器不知道您的对象属于您的自定义类。

    【讨论】:

      猜你喜欢
      • 2013-11-21
      • 1970-01-01
      • 2017-06-26
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      相关资源
      最近更新 更多