search结果中的3D Peek&Pop

我使用search栏来过滤我的表格视图。 我在显示可search内容的相同视图控制器中显示search结果。 它工作正常。 除了一件事 – 3D Peek和Pop不适用于search结果 。 我曾尝试Storyboard segue中的“Peek&Pop”checkbox。 我没有尝试在我的TableViewController中编程偷看和stream行。 结果是一样的:peek&pop适用于表格视图单元格,但不适用于search结果单元格。

这里是search和偷看&stream行代码片断:

// Add a search bar searchController = UISearchController(searchResultsController: nil) tableView.tableHeaderView = searchController.searchBar searchController.searchResultsUpdater = self searchController.hidesNavigationBarDuringPresentation = false searchController.dimsBackgroundDuringPresentation = false self.tableView.contentOffset = CGPoint(x: 0, y: searchController.searchBar.frame.height) // Register for preview if traitCollection.forceTouchCapability == .available { previewingContext = registerForPreviewing(with: self, sourceView: tableView) } func updateSearchResults(for searchController: UISearchController) { if let searchText = searchController.searchBar.text { filterContent(for: searchText) tableView.reloadData() } } // MARK: UIViewControllerPreviewingDelegate methods func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { guard let tableView = previewingContext.sourceView as? UITableView, let indexPath = tableView.indexPathForRow(at: location), let cell = tableView.cellForRow(at: indexPath), let detailVC = storyboard?.instantiateViewController(withIdentifier: "AlarmViewController") as? AlarmViewController else { return nil } detailVC.alarm = alarms[indexPath.row] previewingContext.sourceRect = cell.frame return detailVC } func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { show(viewControllerToCommit, sender: self) } 

有没有人有任何想法如何实施search结果窥探&stream行?

我猜主要问题是如何注册预览UISearchController?..

我做了它的工作。 有几个'块新'的错误。 正确的代码:

 // Add a search bar searchController = UISearchController(searchResultsController: nil) searchController.loadViewIfNeeded() tableView.tableHeaderView = searchController.searchBar searchController.searchResultsUpdater = self searchController.delegate = self searchController.hidesNavigationBarDuringPresentation = false searchController.dimsBackgroundDuringPresentation = false self.tableView.contentOffset = CGPoint(x: 0, y: searchController.searchBar.frame.height) // Hide search bar on detailed view and preserve search results self.definesPresentationContext = true // Register for preview if traitCollection.forceTouchCapability == .available { previewingContext = registerForPreviewing(with: self, sourceView: tableView) } func updateSearchResults(for searchController: UISearchController) { if let searchText = searchController.searchBar.text { filterContent(for: searchText) tableView.reloadData() } } // MARK: UIViewControllerPreviewingDelegate methods func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { guard let tableView = previewingContext.sourceView as? UITableView, let indexPath = tableView.indexPathForRow(at: location), let cell = tableView.cellForRow(at: indexPath), let detailVC = storyboard?.instantiateViewController(withIdentifier: "AlarmViewController") as? AlarmViewController else { return nil } detailVC.alarm = (searchController.isActive) ? searchResults[(indexPath.row)] : alarms[indexPath.row] previewingContext.sourceRect = cell.frame return detailVC } func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { show(viewControllerToCommit, sender: self) } 

总之:1)添加委托searchController 2)使用searchResults UIViewControllerPreviewingDelegate如果searchController.isActive

希望它可以帮助别人。