故事板中的子类化
Subclassing in Storyboard
当我覆盖 func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
时,我通过
获得目标视图控制器
let viewController = segue.destinationViewController as! VehicleDetailViewController
到目前为止工作正常。
但是我怎样才能用 SomeDetailViewController
的某个子类替换 VehicleDetailViewController
,例如CarDetailViewController
或 BikeDetailViewController
?
因此代码(片段)应该如下所示
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。
当我覆盖 func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
时,我通过
let viewController = segue.destinationViewController as! VehicleDetailViewController
到目前为止工作正常。
但是我怎样才能用 SomeDetailViewController
的某个子类替换 VehicleDetailViewController
,例如CarDetailViewController
或 BikeDetailViewController
?
因此代码(片段)应该如下所示
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。