我正在尝试搜索我的解析数据库中的所有用户,无论是他们的用户名还是姓名。到目前为止,它正在搜索,但无法识别第一个字母...它仅在键入第二个字母后才开始搜索,一旦键入,它就会搜索第一个字母...
这是我的问题,如果有人能看到这个问题,我希望得到您的帮助!
任何更多解释只需发表评论...非常感谢。
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/