我有2个数组。一种用于所有车辆,另一种用于过滤车辆。通过搜索栏动态生成的filterdVehicles效果很好。但是我不能为下一场景动态选择。

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)

最佳答案

我相信您已经在故事板上从表格视图单元到下一个场景设置了序列。这样,您的segue会自动执行,您不必调用self.performSegueWithIdentifier("DisplayViewSegue", sender: tableView)

当然,问题在于发送者是表视图单元,而不是您希望的表视图。您有两种选择:


删除didSelectRowAtIndexPath的内容,并在prepareForSegue内以其他方式获取对表视图的引用。
通过更改segue来更新情节提要,使其源自视图控制器本身而不是表视图单元。这将使您能够在performSegueWithIdentifier方法内调用didSelectRowAtIndexPath

关于ios - UITableView和带有Segue的搜索栏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31343717/

10-14 01:15