将unwind segue与UISearchController一起使用时出错

时间:2016-10-12 15:21:19

标签: ios swift uinavigationcontroller uisearchcontroller unwind-segue

我有一个带有UITableViewController的导航控制器。

当用户在TableViewController上选择一个单元格时,它会推送到一个带有Table View的新View Controller。然后,用户选择一个单元格,数据通过展开segue传回。

问题是在选择单元格之前使用搜索栏时出现此错误。以下是控制台所说的内容:

popToViewController:transition: called on <UINavigationController 0x7fc8ab856e00> while an existing transition or presentation is occurring; the navigation stack will not be updated.

来自View Controller I的代码我将

中展开
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        let cell = tableView.cellForRow(at: indexPath) as! MonsterSpriteCell
        let monster = monsters[indexPath.row]
        selectedMonster = monster
        if isTeamBuilding {
            // **ERROR OCCURS HERE**
            performSegue(withIdentifier: "saveToTeamBuilderTableVC", sender: cell)
        } else {
            performSegue(withIdentifier: "showMonsterDetail", sender: self)
        }
    }

这是项目的链接。我从“浏览视图控制器”展开的视图控制器。我正在展开的View Controller是TeamBuilderViewController https://github.com/emanleet/monsterpedia

编辑:我认为可能需要注意的是,segue会展开TeamBuilderTableViewController,它是一个视图控制器,作为另一个视图控制器的一部分位于容器内。有谁知道这可能就是为什么我的unwind segue无法正常工作?

2 个答案:

答案 0 :(得分:0)

SearchController呈现空视图控制器
如果您在搜索处于活动状态时在presentedViewController打印didSelectRow..,则会看到一个视图控制器 这意味着你正试图从当前的演示文稿中执行segue。在执行任何细分或演示之前,您应该忽略SearchController

同样在这种情况下,您不需要SearchController,因为您只使用SearchBar进行过滤。
相反,在SearchBar中添加tableViewHeaderView并使用其委托进行过滤,而不是检查isActive是否访问完整列表与过滤结果,只需将整个数组放入在文本被清除时在过滤器中,并始终访问过滤结果。

答案 1 :(得分:0)

两步,首先解雇搜索控制器提供的视图控制器,然后,做你自己的事情。

yourSearchController.dismiss(animated: true, completion: { 
                self.performSegue(withIdentifier: "yourUnwindSegue", sender: self)
            })