2017-03-12 56 views
0

我使用搜索栏来过滤我的表格视图。我在显示可搜索内容的相同视图控制器中显示搜索结果。它工作正常。除了一件事 - 3D Peek and Pop不适用于搜索结果。 我曾尝试Storyboard segue中的'Peek & Pop'复选框。我曾尝试编写我的TableViewController中的pop pop &。结果是一样的:peek & pop适用于表格视图单元格,但不适用于搜索结果单元格。3D Peek&Pop搜索结果

这里是搜索和PEEK &弹出代码片段:

// 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) 
    } 

有任何人任何想法如何实现偷看&流行的搜索结果?

我想主要的问题是如何为预览UISearchController?..

+0

[UITableView单元上的Peek和Pop失败,并且UISearchController失败](http://stackoverflow.com/questions/42196749/peek-and-pop-on-uitableview-cells-fails-with-uisearchcontroller) –

+1

@ DaveWeston Thanx为您的输入!我确实检查了你的建议,但不幸的是它不适用于我。也许是因为我为搜索结果重复使用了相同的表视图控制器。在你提到的主题中,一个单独的视图控制器用于搜索结果。 –

回答

0

我做了它的工作寄存器。有几个'新的孩子'的错误。正确的代码:

// 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)使用SearchResult所中UIViewControllerPreviewingDelegate如果searchController.isActive

希望它可以帮助别人添加为委托searchController 2)。