【问题标题】:Subclassing in Storyboard [duplicate]故事板中的子类化[重复]
【发布时间】:2016-02-29 16:36:59
【问题描述】:

当我覆盖 func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 时,我通过

获得目标视图控制器
let viewController = segue.destinationViewController as! VehicleDetailViewController

到目前为止工作正常。

但是我怎样才能用SomeDetailViewController 的某个子类替换VehicleDetailViewController,例如CarDetailViewControllerBikeDetailViewController?

所以代码(sn-p)应该是这样的

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "SegueID" {
        let indexPath = tableView.indexPathForSelectedRow!
        let vehicle = Vehicle[indexPath.row]
        switch vehicle {
        case is Car:
            let viewController = segue.destinationViewController as! CarDetailViewController

        case is Bike:
            let viewController = segue.destinationViewController as! BikeDetailViewController
        }
    }
}

但 Xcode 告诉我不允许强制转换:

无法转换“SomeApp.VecicleDetailViewController”类型的值 (0x10ede2220) 到“SomeApp.CarSensorDetailViewController” (0x10ede2310)。

也欢迎对 Objective-C 的帮助,因为这个问题与语言无关。

【问题讨论】:

  • 你为什么不尝试案例 0,案例 1 而不是对象?
  • 这与 switch-case 无关(它工作正常),问题是从VehicleDetailViewController 转换为其子类CarDetailViewController
  • 你能贴出与错误相关的代码吗?即带有 CarSensorDetailViewController 的代码
  • 是的,我确实添加了 Xcode 错误消息。

标签: objective-c swift storyboard segue uistoryboardsegue


【解决方案1】:

一个 segue 实例化一个特定的类。如果你想要SomeDetailViewController 的多个子类,那么你需要在 Storyboard 中布局多个 viewController 并创建多个 segue。

您可以通过 control-从 viewController 顶部的 viewController 图标拖动到作为 SomeDetailViewController 子类的每个 viewController 来执行此操作。然后将标识符添加到 segues 并在 didSelectRowAtIndexPath 中使用 performSegueWithIdentifier 调用它们。

另一种方法是为您的 tableView 创建多个原型单元格,每个单元格都连接到它所连接的特定 viewController。

【讨论】:

  • 我真的希望有另一种解决方案,但感谢您的回答。
  • 我希望有一个没有 Storyboard 的纯代码解决方案,但是好的,Storyboard,我来了。 :)
  • 对于纯代码解决方案,完全放弃 segues 并以老式方式进行。实例化新的视图控制器,用它需要的信息填充它并推送它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多