gpt4 book ai didi

ios - 如何在从 coredata 加载的 tableviewcontroller 中搜索

转载 作者:行者123 更新时间:2023-11-28 08:33:41 25 4
gpt4 key购买 nike

下面给出了我的 tableviewcontroller 的代码

import UIKit
import CoreData
class NotesListTableViewController: UITableViewController {
var managedObjectContext : NSManagedObjectContext!
var entries: [NSManagedObject]!

override func viewDidLoad()
{
super.viewDidLoad()
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
managedObjectContext = appDelegate.managedObjectContext
// makes the searchbar stay in the current screen and not spill into the next screen
// definesPresentationContext = true

// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

// MARK: - Table view data source
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.entries.count
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int
{
return 1
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("NotesCell", forIndexPath: indexPath)
// Configure the cell...
let entry1 = entries[indexPath.row]
cell.textLabel?.text = entry1.valueForKey("entry_body") as? String
let imageData2 = entry1.valueForKey("entry_image") as? NSData

if let imageData2 = imageData2
{
let myimage = UIImage(data:imageData2,scale:1.0)
cell.imageView?.image = myimage
}
return cell
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier! == "showNote"
{
let detailDisplay = segue.destinationViewController as! DetailDisplayViewController
let selectedIndexPath = tableView.indexPathForSelectedRow!
let entry = entries[selectedIndexPath.row]
detailDisplay.entry = entry
}
}
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
let entry1 = self.entries[indexPath.row]
self.managedObjectContext.deleteObject(entry1)
self.entries.removeAtIndex(indexPath.row)
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
do
{
try managedObjectContext.save()
} catch {
print ("could not save the new entry ")
}
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.tabBar.hidden = false
self.fetchEntries()
}

func fetchEntries()
{
let fetchRequest = NSFetchRequest(entityName:"Entry")
do {
let entryObjects = try managedObjectContext.executeFetchRequest(fetchRequest)
self.entries = entryObjects as! [NSManagedObject]
}catch let error as NSError
{
print ("could not save the new entry \(error.description) ")
}
tableView.reloadData()
}

最佳答案

首先,在你的 View Controller 中实现这个协议(protocol):

class NotesListTableViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate{

在你的类中声明一个 UISearchController:

let searchController = UISearchController(searchResultsController: nil)

在方法 viewDidLoad 中:

searchController.searchBar.placeholder = "Search..."
searchController.searchBar.backgroundColor = UIColor.clearColor()
searchController.searchBar.searchBarStyle = UISearchBarStyle.Minimal
searchController.searchBar.tintColor = UIColor.blueColor()

searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar

用这个扩展你的 View Controller :

extension YourViewController: UISearchBarDelegate {
// MARK: - UISearchBar Delegate
func searchBar(searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
fetchEntries(searchBar.text!)
}
}

extension YourViewController: UISearchResultsUpdating {
// MARK: - UISearchResultsUpdating Delegate
func updateSearchResultsForSearchController(searchController: UISearchController) {
fetchEntries(searchController.searchBar.text!)
}
}

在这一点上你需要创建一个过滤数组“条目”的函数,例如你可以这样做:

func fetchEntries(searchText: String) {
//To do your filter based in a String
tableView.reloadData()
}

关于ios - 如何在从 coredata 加载的 tableviewcontroller 中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com