kabochappinote

articlesswift
swift codeMemo (SearchBar)

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")
    }
}




NSPredicate Cheatsheet 参考サイト
NSPredicate Matt 参考サイト


back