ios - 用户打字时搜索栏不工作

标签 ios swift

我有一个带有搜索栏的 UITableViewController。当用户点击返回按钮时搜索会起作用,但我无法在用户键入时更新 UITable。我已经实现了“searchBardidBeginEditing”功能,但它没有提供任何搜索结果。我将不胜感激任何帮助。

  var findgroups: PFQuery = PFQuery(className: "Groups")



            if self.searchBar.text != "" {
                self.dataparse.removeAllObjects()
                findgroups.whereKey("GroupName", containsString: self.searchBar.text)
                findgroups.findObjectsInBackgroundWithBlock({ (obs: [AnyObject]?, err: NSError?) -> Void in
                    if err == nil && obs != nil {

                        if let obs = obs as? [PFObject] {

                            for objex in obs {

                                self.dataparse.addObject(objex)

                            }

                        }

                    }

                    self.tableView.reloadData()

                })


            } else {



    findgroups.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
        findgroups.orderByDescending("GroupName")
        if error == nil && objects != nil {



            if let objects = objects as? [PFObject] {

                for object in objects {

                    self.dataparse.addObject(object)


                }

            }

        }



        self.tableView.reloadData()
    }


}

}




func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
    self.loaddata()

}

func searchBarTextDidEndEditing(searchBar: UISearchBar) {
    searchBar.resignFirstResponder()



}






override func viewDidLoad() {
    super.viewDidLoad()
    loaddata()
    searchBar.delegate = self


}


    func searchBarSearchButtonClicked(searchBar: UISearchBar) {
    self.dataparse.removeAllObjects()
    searchBar.resignFirstResponder()
    loaddata()
}

func searchBarCancelButtonClicked(searchBar: UISearchBar) {
    searchBar.text = ""
    searchBar.resignFirstResponder()
    loaddata()
}

最佳答案

您的错误是您调用了“searchBardidBeginEditing”函数,但此函数仅在用户开始使用 UISearchBar 进行搜索时告诉委托(delegate)人。当用户点击栏时,也会调用 searchBarSearchButtonClicked 函数。因此,您只调用更新函数两次,而不是每次搜索文本更改时。

要修复此问题,请在“searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)”函数中使用数据更新函数,如下所示:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

    loaddata()
}

如果需要,您还可以使用 searchText 并将其提供给 loaddata(),因为 searchText 与 self.searchBar.text 相同

以下链接将带您进入 UISearchBarDelegate 协议(protocol)引用,您可以在其中了解协议(protocol)每个功能的含义: https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UISearchBarDelegate_Protocol/index.html#//apple_ref/occ/intfm/UISearchBarDelegate/searchBar:textDidChange :

关于ios - 用户打字时搜索栏不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32168435/

相关文章:

ios - Phonegap(iOS): can not return to site after paypal payment

swift - 如何将 self.dynamicType 变成类型别名

ios - 为 JSQMessages 添加名称标签和日期标签

ios - 如何在 Swift 中正确测试 Core Data

ios - viewWillTransitionToSize : vs willTransitionToTraitCollection:

php - 如何在 php 脚本中解码 NSData?

ios - 表格单元格中标签的 sizeToFit 函数的意外行为

swift - 在 NSTouchBar 中填充 NSImageView

ios - 使用EvenOddFillRule 使用 UIKit 制作 donut 的示例

ios - 在固定宽度上使用自动布局调整 UIButton 的 titleLabel 文本