2015-11-26 62 views
0

当我重写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中告诉我,中投是不允许的:

无法投型 'SomeApp.VecicleDetailViewController' 的值( 0x10ede2220)改为'SomeApp.CarSensorDetailViewController' (0x10ede2310)。

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

+0

为什么不尝试案例0,情况1而不是对象? –

+0

这不是关于switch-case(它工作正常),问题是从'VehicleDetailViewController'到它的子类'CarDetailViewController'的转换。 –

+1

可以发布与错误相关的代码吗?即代码与CarSensorDetailViewController –

回答

2

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

您可以通过控制在你的viewController的顶部各的viewController是的SomeDetailViewController一个子类从的viewController图标-dragging做到这一点。然后在segues中添加标识符并用performSegueWithIdentifierdidSelectRowAtIndexPath中调用它们。

另一种方法是为您的tableView创建多个原型单元格,每个原型单元连线到它继续使用的特定viewController。

+0

我真的希望有另一种解决方案,但这要归功于你的回答。 –

+0

我希望只有一个没有Storyboard的代码解决方案,但是好的,Storyboard,我来了。 :) –

+1

对于仅有代码的解决方案,完全放弃继续并以旧式的方式进行。实例化新的视图控制器,用它需要的信息填充并推送它。 – vacawama