2017-10-11 6 views
0

그래서 내 navigationItem에 searchcontroller가 있습니다.탐색 항목의 검색 컨트롤러가 혼동스러운 동작

// View controller 
var searchController = UISearchController(searchResultsController: nil) 

// viewWillAppear() 
override func viewWillAppear(_ animated: Bool) { 
tableView.reloadData() 
if #available(iOS 11.0, *) { 
    navigationController?.navigationBar.prefersLargeTitles = true 
} 
if employeeSearchList.count > 10 { 
    if #available(iOS 11.0, *) { 
    navigationItem.searchController = searchController 
    } else { 
    tableView.tableHeaderView = searchController.searchBar 
    } 
} else { 
    if #available(iOS 11.0, *) { 
    let search = UISearchController(searchResultsController: nil) 
    navigationItem.searchController = search 
    navigationItem.searchController = nil 
    } else { 
    tableView.tableHeaderView = nil 
    } 
} 
UIView.animate(withDuration: 0.50, animations: { 
    self.view.layoutIfNeeded() 
}) 
} 

이 코드는 완벽하게 실행됩니다. 개수가 10보다 작 으면 searchController가 설정되고, 그렇지 않으면 빈 searchController로 설정된 다음 nil로 설정되어 UI에서 사라집니다. 내가이 하나 위의 ViewController을 제시하고이를 기각 할 때

// viewDidLoad() 
searchController.searchResultsUpdater = self 
searchController.dimsBackgroundDuringPresentation = false 
searchController.searchBar.tintColor = tintColor 

// Table view editing delegate -> delete operation 
if employeeSearchList.count < 10 { 
     if #available(iOS 11.0, *) { 
     let search = UISearchController(searchResultsController: nil) 
     navigationItem.searchController = search 
     navigationItem.searchController = nil 
     } else { 
     tableView.tableHeaderView = nil 
     } 
     UIView.animate(withDuration: 0.50, animations: { 
     tableView.reloadData() 
     self.view.layoutIfNeeded() 
     }) 
    } 

이제 내 문제가되면, viewWillAppear 잘 실행하지만 searchController는 표시되지 않습니다. 그러나 내가 viewController를 밀고 돌아 오면, 그것은 나타난다.

2 가지 작업의 주요 차이점은 무엇입니까? (push/pop & present/dismiss)

답변

0

다른보기 컨트롤러 양식을 제시하면 새로운 viewController 계층 구조가 나타납니다. 즉, 이전 탐색 컨트롤러 밖에 있습니다. 내비게이션 컨트롤러에서 새 컨트롤러를 푸시하면 스택에 추가되고 탐색 바가 표시됩니다.

+0

나는 어떤 경우에도 여분의 함수, 델리게이트 등이 호출 될 것이라고 기대했다. –

0

해결되었습니다.

이 navigationController.navigationItem.searchController = searchController 대신 navigationItem.searchController = searchController이어야한다.

유일한있는 navigationController 새로 고침 /로드/무엇이든 적절한 용어는 다음 번 적용됩니다 후자?