当我遇到错误时,我正在关注本教程http://www.raywenderlich.com/76519/add-table-view-search-swift。我将此功能添加到我正在处理的应用程序中。一旦我进入摊位表视图,我希望能够通过导航栏上的按钮导航到主菜单。以下是处理segue的代码部分。
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("BoothDetail", sender: tableView)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if segue.identifier == "BoothDetail" {
let BoothDetailViewController = segue.destinationViewController as UIViewController
if sender as UITableView == self.searchDisplayController!.searchResultsTableView {
let indexPath = self.searchDisplayController!.searchResultsTableView.indexPathForSelectedRow()!
let destinationTitle = self.filteredBooths[indexPath.row].name
BoothDetailViewController.title = destinationTitle
} else {
let indexPath = self.tableView.indexPathForSelectedRow()!
let destinationTitle = self.booths[indexPath.row].name
BoothDetailViewController.title = destinationTitle
}
}
}
}
尝试使用展位列表中的后退按钮时会抛出错误,该按钮是主会议菜单的直接显示。错误就在这一行。
if sender as UITableView == self.searchDisplayController!.searchResultsTableView {
答案 0 :(得分:1)
你有很多问题。有些致命,有些只是头痛。
第一个令人头疼的是你两次叫同一个赛格。这两个函数都调用相同的segue。两者都会执行。现在,如果你想要一个双动画,好吧。但是,由于一个传递数据而另一个没有传递数据,因此您可能会遇到问题。消除didSelectRowAtIndexPath函数。
在您的prepareForSegue方法中,您似乎有两个不同的对象连接到同一个segue。一个searchDisplayController和一个tableView。你想要两个独立的segue。然后你的if / else会根据选择的segue进行更改:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "segue1" {
//code set 1
} else if segue.identifier == "segue2" {
//code set 2
}
}
答案 1 :(得分:-1)
我有类似的问题,我刚刚解决了。在tableview中创建segue时,不要将其从单元格中拖出,创建一个名为" BoothDetail" 并将其连接到BoothDetailViewController,创建一个手动segue选择表视图控制器并单击"显示连接检查器"你会在触发的segue下看到手册。
我的问题是发件人是tableviewcell而不是tableview,所以函数
覆盖func tableView(tableView:UITableView,didSelectRowAtIndexPath indexPath:NSIndexPath){ self.performSegueWithIdentifier(" BoothDetail",sender:tableView) }
从未调用来传递tableview控制器,所以当你尝试投射它时,你得到了错误。
祝你好运