Skip to content

Instantly share code, notes, and snippets.

@doganaysahins
Created September 13, 2023 21:26
Show Gist options
  • Select an option

  • Save doganaysahins/6998b16f0790613a1a3290cef5940148 to your computer and use it in GitHub Desktop.

Select an option

Save doganaysahins/6998b16f0790613a1a3290cef5940148 to your computer and use it in GitHub Desktop.
UIKit Search
import UIKit
import CoreData
class ViewController: UIViewController, UISearchResultsUpdating, UISearchBarDelegate {
// Kendi delegate methodu UISearchBarDelegate
func updateSearchResults(for searchController: UISearchController) {
guard let searchText = searchController.searchBar.text else {
return
}
if searchText.isEmpty {
loadDataFromDataBase()
} else {
let fetchRequest: NSFetchRequest<Item> = Item.fetchRequest()
let predicate = NSPredicate(format: "title CONTAINS[cd] %@", searchText)
fetchRequest.predicate = predicate
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "title", ascending: true)]
do {
items = try context.fetch(fetchRequest)
print("Filtered data is successful")
} catch {
print("Filtered data is not successful \(error)")
}
tableView.reloadData()
}
}
@IBOutlet weak var tableView: UITableView!
var items: [Item] = []
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var searchController: UISearchController!
override func viewDidLoad() {
super.viewDidLoad()
setupSearchController()
tableView.dataSource = self
tableView.delegate = self
loadDataFromDataBase()
}
func setupSearchController() {
// Mevcut goruntude arama sonucunu gostermek icin nil verdik burda
searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.delegate = self
navigationItem.searchController = searchController
searchController.obscuresBackgroundDuringPresentation = false
searchController.definesPresentationContext = true
searchController.searchResultsUpdater = self
}
@IBAction func addButtonPressed(_ sender: UIBarButtonItem) {
var text = UITextField()
let alert = UIAlertController(title: "Add item", message: "", preferredStyle: .alert)
let addButton = UIAlertAction(title: "Add Button", style: .default) { action in
let newItem = Item(context: self.context)
newItem.title = text.text
newItem.isDone = false
self.items.append(newItem)
self.saveDataToDataBase()
}
alert.addTextField { textField in
textField.placeholder = "Enter here"
text = textField
}
alert.addAction(addButton)
present(alert, animated: true)
}
}
//MARK: - TableViewDataSource Functions
extension ViewController: UITableViewDataSource {
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let item = items[indexPath.row]
cell.textLabel?.text = item.title
cell.accessoryType = item.isDone ? .checkmark : .none
return cell
}
}
//MARK: - TableViewDelegate Functions
extension ViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let item = items[indexPath.row]
item.isDone = !item.isDone
saveDataToDataBase()
}
}
//MARK: - DataBase Functions
extension ViewController {
func saveDataToDataBase() {
do {
try context.save()
print("Save data is successful")
} catch {
print("Error saving to database \(error)")
}
tableView.reloadData()
}
func loadDataFromDataBase() {
let fetchRequest: NSFetchRequest<Item> = Item.fetchRequest()
do {
items = try context.fetch(fetchRequest)
print("Load data is successful")
} catch {
print("Load data is not successful \(error)")
}
tableView.reloadData()
}
}
//MARK: - SearchBarDelegate Functions
//burdaki extension yerine searchdelegate icindeki update methoduna gecirdik
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment