gpt4 book ai didi

swift - Parse.com Swift 的搜索功能

转载 作者:行者123 更新时间:2023-11-30 13:32:28 25 4
gpt4 key购买 nike

我正在尝试搜索我的解析数据库中的所有用户,无论是他们的用户名还是姓名。到目前为止,它正在搜索,但无法识别第一个字母...它仅在键入第二个字母后才开始搜索,一旦键入,它就会搜索第一个字母...

这是我的问题,如果有人能看到这个问题,我希望得到您的帮助!

任何更多解释只需发表评论...非常感谢。

 func searchBar(searchBar: UISearchBar, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
let usernameQuery = PFQuery(className: "_User")
usernameQuery.addDescendingOrder("createdAt")
usernameQuery.limit = 20
usernameQuery.whereKey("username", matchesRegex: "(?i)" + self.searchBar.text!)
usernameQuery.findObjectsInBackgroundWithBlock ({ (objects:[PFObject]?, error:NSError?) -> Void in
if error == nil {
if objects!.isEmpty {

let fullnameQuery = PFUser.query()
fullnameQuery?.whereKey("firstname", matchesRegex: "(?i)" + self.searchBar.text!)
fullnameQuery?.findObjectsInBackgroundWithBlock({ (objects:[PFObject]?, error:NSError?) -> Void in

if error == nil {
self.search.removeAll(keepCapacity: false)
for object in objects! {

let name = SearchStruct(username: object.valueForKey("username") as! String,
fullname: object.valueForKey("firstname") as! String,
profileImage: object.valueForKey("profilePicture") as! PFFile)
self.search.append(name)
}
self.tableView1.reloadData()

}
})
}

self.search.removeAll(keepCapacity: false)

for object in objects! {
let user = SearchStruct(username: object.valueForKey("username") as! String,
fullname: object.valueForKey("firstname") as! String,
profileImage: object.valueForKey("profilePicture") as! PFFile)

self.search.append(user)
}
self.tableView1.reloadData()
textLabel.text = ""
self.activityS.stopAnimating()
}
})

编辑

所以我删除了上面的代码并添加了以下内容:

 func updateSearchResultsForSearchController(searchController: UISearchController) {
// let searchText = searchController.searchBar.text
//Here the spinnier is initialized

activityS.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
activityS.startAnimating()


let textLabel = UILabel(frame: CGRect(x: 60, y: 0, width: 300, height: 50))
textLabel.textColor = UIColor.grayColor()
textLabel.text = "Searching for \(searchBar.text!)"


self.view.addSubview(activityS)
self.view.addSubview(textLabel)


let usernameQuery = PFQuery(className: "_User")
usernameQuery.addDescendingOrder("createdAt")
usernameQuery.limit = 20
usernameQuery.whereKey("username", matchesRegex: "(?i)" + searchController.searchBar.text!)
usernameQuery.findObjectsInBackgroundWithBlock ({ (objects:[PFObject]?, error:NSError?) -> Void in
if error == nil {
if objects!.isEmpty {

let fullnameQuery = PFUser.query()
fullnameQuery?.whereKey("firstname", matchesRegex: "(?i)" + searchController.searchBar.text!)
fullnameQuery?.findObjectsInBackgroundWithBlock({ (objects:[PFObject]?, error:NSError?) -> Void in

if error == nil {
self.search.removeAll(keepCapacity: false)
for object in objects! {

let name = SearchStruct(username: object.valueForKey("username") as! String,
fullname: object.valueForKey("firstname") as! String,
profileImage: object.valueForKey("profilePicture") as! PFFile)
self.search.append(name)
}
self.tableView1.reloadData()

}
})
}

self.search.removeAll(keepCapacity: false)

for object in objects! {
let user = SearchStruct(username: object.valueForKey("username") as! String,
fullname: object.valueForKey("firstname") as! String,
profileImage: object.valueForKey("profilePicture") as! PFFile)

self.search.append(user)
}
self.tableView1.reloadData()
textLabel.text = ""
self.activityS.stopAnimating()
}
})
// Do your search and refresh the table
tableView1.reloadData()
}

最佳答案

尝试使用UISearchResultsUpdating协议(protocol)。每次您在搜索栏中输入内容时,都会触发 updateSearchResultsForSearchController

class YourTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating, UISearchBarDelegate {

// Initiate the searchController
let searchController = UISearchController(searchResultsController: nil)

override func viewDidLoad() {
// Use the current view controller to update the search results and as delegate
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.delegate = self;
self.tableView.tableHeaderView = searchController.searchBar
}
...
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchText = searchController.searchBar.text
// Do your search and refresh the table
tableView.reloadData()
}
...
}

希望这有帮助。

关于swift - Parse.com Swift 的搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36410772/

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