swift - Parse.com Swift 的搜索功能

标签 swift uitableview parse-platform

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

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

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

 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/

相关文章:

android - Parse - 在同一个对象中保存多个图像

swift - 如何在 tableView 中快速制作带有联系人的字母部分

ios - 带有 Parse 对象的 Swift Update 标签

ios - 如何手动调用UITableView的delegate方法?

ios - 我在调整表格 View 单元格的大小时遇到​​问题

ios - 解析checkIfCommandIsRunning暂停应用

swift - 如何在 for case 模式匹配循环中获取索引

ios - 如何从父 View Controller 检测容器 View 中的焦点 UITextField

ios - UITableViewCell 神秘地改变高度

ios - 如何在 Parse API 中访问字典数组