2

私はUITableViewControllerを持つナビゲーションコントローラを持っています。UISearchControllerでunwind segueを使用したときのエラー

ユーザーがTableViewControllerでセルを選択すると、Table Viewを含む新しいView Controllerがプッシュされます。ユーザーはセルを選択し、データは巻き戻しセグを経由して戻されます。

セルを選択する前に検索バーを使用すると、このエラーが発生することがあります。ここでは、コンソールはこう言われる、私はからを巻き戻していますビューコントローラから

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

コード:ここで

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はBrowse View Controllerです。ビューコントローラは、私がTeamBuilderViewController あるために巻き戻していhttps://github.com/emanleet/monsterpedia

編集:私はセグエは、別のビューコントローラの一部としてコンテナ内にあるビューコントローラであるTeamBuilderTableViewControllerに解かことに注意することは、関連するかもしれないと思います。これが私のゆるやかなセグがうまくいかない理由があれば誰にも分かりますか?

答えて

0

検索はビューコントローラが表示されますアクティブなときに、あなたがdidSelectRow..presentedViewControllerを印刷する場合SearchControllerは、空のビューコントローラ
を提示しています。
これは、現在のプレゼンテーションの下からsegueを実行しようとしていることを意味します。あなたはセグやプレゼンテーションを行う前にSearchControllerを却下するべきです。

この場合も、フィルタリングにはSearchBarしか使用していないため、SearchControllerは必要ありません。
tableViewHeaderViewSearchBarを入れ、その代理人を使用してフィルタリングし、isActiveがフィルタリングされた結果と完全なリストにアクセスするかどうかをチェックするのではなく、テキストがクリアされ、フィルタリングされた結果にアクセスします。

0

2段階のことは、まず、表示コントローラを提示したView Controllerを閉じてから、あなたのことをしてください。

yourSearchController.dismiss(animated: true, completion: { 
       self.performSegue(withIdentifier: "yourUnwindSegue", sender: self) 
      }) 
関連する問題