在故事板中进行子类化

时间:2015-11-26 14:26:39

标签: objective-c swift storyboard segue uistoryboardsegue

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

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

到目前为止工作正常。

但是,如何将VehicleDetailViewController替换为SomeDetailViewController的某些子类,例如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告诉我不允许演员表:

  

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

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

1 个答案:

答案 0 :(得分:2)

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

你可以通过 control -dragging从viewController顶部的 viewController 图标到每个作为SomeDetailViewController子类的viewController。然后在segue中添加标识符,并使用performSegueWithIdentifier中的didSelectRowAtIndexPath进行调用。

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