2017-10-11 12 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に設定され、その後はUIから消えるようにnilに設定されます。

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

今私はこの1つ上のViewControllerを提示し、それを閉じたときに私の問題は、viewWillAppearはうまく実行されますが、searchControllerは表示されません。しかし、私はviewControllerを押して、戻ってくる場合、それが表示されます。

2つの操作の主な違いは何ですか? (プッシュ/ポップ&現在/却下)

答えて

0

ビューコントローラフォームを他に表示すると、新しいviewController階層が表示されます。これは、以前のナビゲーションコントローラの外にあることを意味します。ナビゲーションコントローラーから新しいコントローラーを押すと、これをスタックに追加すると、ナビゲーションバーが表示されます。

+0

私は何か別の機能やデリゲートなどが呼び出されるようなことを望んでいました。 –

0

解決しました。

navigationItem.searchController = searchControllerの代わりにnavigationController.navigationItem.searchController = searchControllerにする必要があります。

後者は、次回に適切な用語であるnavigationControllerが更新/ロードされたときにのみ有効です。

関連する問題