swift codeMemo (SearchBar)
2021-09-02 15:07:55
⚪︎ CoreData
① ※SearchBar on NavigationBar
private let searchController = UISearchController(searchResultsController: nil)
// setting searchController
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
//↓サーチバーを選択した時にナビゲーションバーの形を崩さないようにする
//searchCtl.hidesNavigationBarDuringPresentation = false
searchController.searchBar.placeholder = "Search"
searchController.searchBar.delegate = self
navigationItem.searchController = searchController
// ↓これが無いとサーチバーが表示されない
navigationItem.hidesSearchBarWhenScrolling = false
definesPresentationContext = false
//searchController.searchBar.showsCancelButton = true
// MARK: - UISearchBarDelegate
extension TodoListVC: UISearchBarDelegate {
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
print("DEBUG: SearchButtonClicked")
let request: NSFetchRequest = Item.fetchRequest()
let predicate = NSPredicate(format: "title CONTAINS[cd] %@", searchBar.text!)
request.predicate = predicate
let sortDescriptor = NSSortDescriptor(key: "title", ascending: true)
request.sortDescriptors = [sortDescriptor]
do {
itemArray = try context.fetch(request)
} catch {
print("DEBUG: Error fetching data from context \(error)")
}
tableView.reloadData()
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text?.count == 0 {
loadItems()
DispatchQueue.main.async {
// ウィンドウ内の第一応答者としての地位を放棄するよう求められたことを、このオブジェクトに通知
// その結果、キーボードが隠れる
searchBar.resignFirstResponder()
}
}
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
print("DEBUG: SearchBarTextDidEndEditing")
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
print("DEBUG: SearchBarCancelButtonClicked")
}
}