我有2个数组。一个用于所有车辆,另一个是过滤车辆。 filteredVehicles由搜索栏动态生成,效果很好。但我无法为下一个场景动态制作。
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("DisplayViewSegue", sender: tableView)
}
和
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "DisplayViewSegue" {
let nextScene = segue.destinationViewController as! DisplayViewController
if sender as! UITableView == self.searchDisplayController!.searchResultsTableView {
let indexPath = self.searchDisplayController!.searchResultsTableView.indexPathForSelectedRow()!
let selectedVehicle = self.filteredVehicles[indexPath.row]
nextScene.currentVehicle = selectedVehicle
} else {
let indexPath = self.tableView.indexPathForSelectedRow()!
let selectedVehicle = self.vehicles[indexPath.row]
nextScene.currentVehicle = selectedVehicle
}
}
}
这些是与我相关的方法。当我点击任何表列表对象时,App正在进行代理并出现此类错误:
无法转换类型' UITableViewCell' (0x10757f9f0)到 '的UITableView' (0x10757a810)。 (LLDB)
答案 0 :(得分:1)
我相信你已经在故事板中从表格视图单元格到下一个场景中设置了一个segue。通过这样做,您的segue会自动执行,您无需拨打self.performSegueWithIdentifier("DisplayViewSegue", sender: tableView)
问题当然是发件人是表格视图单元格而不是表格视图,正如您所希望的那样。你有几个选择:
didSelectRowAtIndexPath
的内容,并在prepareForSegue
内,以其他方式获取对表格视图的引用。performSegueWithIdentifier
方法中调用didSelectRowAtIndexPath
。答案 1 :(得分:0)
看起来发件人是您按下的表格视图单元格,因此您不应在此处进行强制转换。 (一般来说,最好避免使用!)
我建议在didSelectRowAtIndexPath
中选择选择哪辆车的逻辑。假设你有一个名为Vehicle
的类型,就像工作一样:
var selectedVehicle: Vehicle?
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if tableView == searchDisplayController?.searchResultsTableView {
selectedVehicle = filteredVehicles[indexPath.row]
} else {
selectedVehicle = vehicles[indexPath.row]
}
self.performSegueWithIdentifier("DisplayViewSegue", sender: tableView)
}
这简化了您的prepareForSegue
实施
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "DisplayViewSegue" {
if let nextScene = segue.destinationViewController as? DisplayViewController {
nextScene.currentVehicle = selectedVehicle
}
}
}