故事板中的子类化

Subclassing in Storyboard

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

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

到目前为止工作正常。

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

因此代码(片段)应该如下所示

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 告诉我不允许转换:

Could not cast value of type 'SomeApp.VecicleDetailViewController' (0x10ede2220) to 'SomeApp.CarSensorDetailViewController' (0x10ede2310).

也欢迎在 Objective-C 中提供帮助,因为问题与语言无关。

一个 segue 实例化一个特定的 class。如果您想要 SomeDetailViewController 的多个子 class,那么您将需要在故事板中布局多个 viewController,并创建多个 segues。

您可以通过 控制-从 viewController 顶部的 viewController 图标拖动来实现] 到 SomeDetailViewController 的子 class 的每个 viewController。然后将标识符添加到 segues 并在 didSelectRowAtIndexPath.

中使用 performSegueWithIdentifier 调用它们

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