2017-02-14 7 views
2

searchResultsUpdater에 대해 어떻게 다른 ViewController을 설정할 수 있습니까? 이런 식으로 시도했지만 결과가 업데이트되지 않습니다.검색 결과를위한 ViewControllerUpdater

let searchNav = storyboard!.instantiateViewController(withIdentifier: "SearchControllerNav") as! UINavigationController 
    let vc = searchNav.topViewController as! PageMenuVC 
    let searchVC = storyboard!.instantiateViewController(withIdentifier: "SearchVC") as! SearchVC 
    self.searchController = UISearchController(searchResultsController: vc) 
    vc.searchController.searchResultsUpdater = searchVC 

여기 내 PageMenuVC : 당신이 더 많은 정보가 필요하면

//MARK: Filter 
func filterContentForSearchText(searchText: String, scope: String = "All") { 
    filteredUsers = allUsers.filter { user in 
     return user.name.lowercased().contains(searchText.lowercased()) 
    } 
    collectionView.reloadData() 
} 




//MARK: SearchResultDelegate 
func updateSearchResults(for searchController: UISearchController) { 
    let searchBarText = searchController.searchBar.text! 
    filterContentForSearchText(searchText: searchBarText) 
    self.searchController = searchController 
    collectionView.reloadData() 
} 

알려 : SearchVC에서

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 


    var controllerArray : [UIViewController] = [] 

    let searchVC = storyboard?.instantiateViewController(withIdentifier: "SearchVC") 
    controllerArray.append(searchVC!) 

    let testVC = storyboard?.instantiateViewController(withIdentifier: "test") 
    controllerArray.append(testVC!) 

    // Customize menu (Optional) 
    let parameters: [CAPSPageMenuOption] = [ 
     .scrollMenuBackgroundColor(UIColor(red: 30.0/255.0, green: 30.0/255.0, blue: 30.0/255.0, alpha: 1.0)), 
     .viewBackgroundColor(UIColor(red: 20.0/255.0, green: 20.0/255.0, blue: 20.0/255.0, alpha: 1.0)), 
     .selectionIndicatorColor(UIColor.orange), 
     .bottomMenuHairlineColor(UIColor(red: 70.0/255.0, green: 70.0/255.0, blue: 80.0/255.0, alpha: 1.0)), 
     .menuItemFont(UIFont(name: "HelveticaNeue", size: 13.0)!), 
     .menuHeight(40.0), 
     .menuItemWidth(90.0), 
     .centerMenuItems(true) 
    ] 

    // Initialize scroll menu 
    pageMenu = CAPSPageMenu(viewControllers: controllerArray, frame: CGRect(x: 0.0, y: 0.0, width: self.view.frame.width, height: self.view.frame.height), pageMenuOptions: nil) 

    self.addChildViewController(pageMenu!) 
    self.view.addSubview(pageMenu!.view) 
    pageMenu!.didMove(toParentViewController: self) 

} 

나는이 기능을 가지고!

+0

희망이 있습니다. https://developer.apple.com/library/content/samplecode/TableSearch_UISearchController/Introduction/Intro.html – Mannopson

답변

0

나는 당신이 self 뷰 컨트롤러의 (개인) 속성에 인스턴스화 된 뷰 컨트롤러를 유지할 필요가 있다고 생각 : 당신이 vc.searchController.searchResultsUpdater에 대리자로 설정하는 경우, 이것은 당신이 저장하지 않는 때문에 경우에만 weak 참조입니다 을 self에 넣으면 너무 빨리 파괴됩니다 (코드 블록의 끝 부분에서). 동일한 내용이 searchNav에도 적용됩니다 (그러나이 내용은 제시 될 예정이므로 아래 생략합니다).

class MyVC : UIViewController { 
    var searchVC:UIViewController? 
    // ... 
    func XYZ() { 
     let searchNav = storyboard!.instantiateViewController(withIdentifier: "SearchControllerNav") as! UINavigationController 
     let vc = searchNav.topViewController as! PageMenuVC 
     // Store searchVC in property: 
     self.searchVC = storyboard!.instantiateViewController(withIdentifier: "SearchVC") as! SearchVC 
     self.searchController = UISearchController(searchResultsController: vc) 
     vc.searchController.searchResultsUpdater = searchVC 
     self.present(searchNav, animated:true, completion:nil) 
    } 
} 
+0

안녕하세요 @ Andreas, 아니요. 작동하지 않습니다. 하지만 방금 내 질문에 더 많은 코드를 추가했습니다. 감사합니다. – John

+0

'filterContentForSearchText'와'updateSearchResults' 메소드가 전혀 호출되지 않았고'collectionView'가 업데이트 될 올바른 뷰인 경우 중단 점 등을 통해 확인하십시오. –

+0

아니요. 전화를 걸지 않았습니다. – John