OGeek|极客世界-中国程序员成长平台

标题: ios - 将 unwind segue 与 UISearchController 一起使用时出错 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 17:49
标题: ios - 将 unwind segue 与 UISearchController 一起使用时出错

我有一个带有 UITableViewController 的导航 Controller 。

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

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

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

来自 View Controller 的代码我正在展开来自:

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 是浏览 View Controller 。我要放松的 View Controller 是 TeamBuilderViewController https://github.com/emanleet/monsterpedia

编辑:我认为可能需要注意的是,segue 展开到 TeamBuilderTableViewController,它是一个 View Controller ,它位于容器内,作为另一个 View Controller 的一部分。有谁知道这是否是我的 unwind segue 不起作用的原因?



Best Answer-推荐答案


SearchController 呈现一个空 View Controller
如果您在搜索处于事件状态时在 didSelectRow.. 中打印 presentedViewController,您将看到一个 View Controller 。
这意味着您正在尝试从当前演示文稿下执行 segue。在执行任何 segue 或演示之前,您应该关闭 SearchController

同样在这种情况下,您不需要 SearchController,因为您只使用 SearchBar 进行过滤。
取而代之的是,在 tableViewHeaderView 中放置一个 SearchBar 并使用它的委托(delegate)进行过滤,而不是检查 isActive 是否可以访问完整列表。过滤后的结果,只需在文本被清除时将整个数组放入过滤器中,并始终访问过滤后的结果。

关于ios - 将 unwind segue 与 UISearchController 一起使用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40002392/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) Powered by Discuz! X3.4