2017-03-12 10 views
0

검색 막대를 사용하여 표보기를 필터링합니다. 검색 가능한 콘텐츠를 표시하는 동일한보기 컨트롤러에 검색 결과를 표시합니다. 그것은 잘 작동합니다. 한 가지를 제외하고 - 3d Peek and Pop이 (가) 검색 결과에 대해 작동하지 않습니다. Storyboard segue에서 'Peek & Pop'확인란을 시도했습니다. 나는 내 TableViewController에서 프로그래밍 peock & pop을 시도했다. 결과는 동일합니다 : peek & pop은 표보기 셀에서는 작동하지만 검색 결과 셀에서는 작동하지 않습니다. 여기3d Peek & Pop 검색 결과

검색 및 들여다 & 팝 코드 조각입니다 :

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

[Peek 및 Pop UITableView 셀 UISearchController 함께 실패 할 수 있습니다] 중복 (http://stackoverflow.com/questions/42196749/peek-and-pop-on-uitableview-cells-fails-with-uisearchcontroller) –

+1

@ DaveWeston 고맙습니다. 나는 당신에게 제안을 확인했고, 불행히도 그것은 나를 위해 일하지 않는다. 검색 결과에 대해 동일한 테이블 뷰 컨트롤러를 다시 사용하기 때문일 수 있습니다. 주제에서는 별도의보기 컨트롤러가 검색 결과에 사용되는 것을 언급합니다. –

답변

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) searchController.isActive

가 누군가를 도움이되기를 바랍니다 경우 UIViewControllerPreviewingDelegate에서의 SearchResult 사용) searchController 2 위임 덧붙였다.