2015-07-10 72 views
0

我有2个数组。所有车辆之一,其他一辆是过滤的车辆。 filteredVehicles通过搜索栏动态生成,并且运行良好。但是我不能为下一个场景动态地继续。UitableView和Segue搜索栏

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 
      } 


     } 
    } 

这些都是我该做相关的SEGUE方法。当我点击任何表列表对象应用的经纪和获得这种类型的错误:

Could not cast value of type 'UITableViewCell' (0x10757f9f0) to 'UITableView' (0x10757a810). (lldb)

回答

1

我相信你已经设置了赛格瑞在你的故事板从表视图单元格您下一个场景。通过这样做,您的segue会自动执行,并且您无需致电self.performSegueWithIdentifier("DisplayViewSegue", sender: tableView)

问题当然是发件人是表格视图单元格而不是表格视图,因为您愿意。你有两个选择:

  1. 删除您didSelectRowAtIndexPath的内容,里面prepareForSegue,获取对表的引用查看一些其他的方式。
  2. 通过将segue更改为源自视图控制器本身而非表格视图单元格来更新您的故事板。这将使您可以在didSelectRowAtIndexPath方法内拨打performSegueWithIdentifier
0

貌似发件人是您按下所以表视图单元格,你不应该在这里做强制转换。 (通常这是避免使用as的好习惯)

我会建议把逻辑的车辆选在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 
     } 
    } 
}