当前位置: 首页 > 面试题库 >

在Swift中智能搜索解析用户名无效

辛麻雀
2023-03-14
问题内容

我试图在我的iOS应用中进行智能搜索,以便当用户在UISearchBar中键入字符时,结果会在搜索栏下方的表格视图中自动更新。由于某些原因,当我在搜索栏中键入字符时,不会调用带有textDidChange的searchBar函数。键入2个字符后调用。因此,我的搜索结果总是比实际在搜索栏中输入的内容落后1步。而且似乎search()函数每次被调用两次。有任何想法吗?

//FUNC: search
func search(searchText: String? = nil){

        if searchText == nil || searchText == "" {
            println("No users found.")

        } else {

            var query = PFUser.query()

            //MAKE CASE INSENSTIVE
            query!.whereKey("username", containsString: searchText!)

            query!.findObjectsInBackgroundWithBlock { (results, error) -> Void in

                if error != nil {
                    println(error)
                } else {
                    if let res = results {
                        self.data = res as? [PFUser]
                    }
                }
            }
        }
        self.tableView.reloadData()

}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
    let user = data[indexPath.row] as! PFUser
    let username = user.username
    println(username)
    cell.textLabel?.text = username
    return cell

}


func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    search(searchText: searchText)
    searchActive = false;

}

问题答案:

您将需要实现UISearchResultsUpdating协议来实现此目的。它使用UISearchController(在iOS
8中引入),该UISearchController必须以编程方式添加,而不是通过故事板添加,但是不用担心,这很简单。

这应该为您完成工作

干杯,罗素

class YourTableViewController: UITableViewController, UISearchBarDelegate, UISearchResultsUpdating {
    var searchUsers: [PFUser] = [PFUser]()
    var userSearchController = UISearchController()
    var searchActive: Bool = false

    // MARK: - Lifecycle

    override func viewDidLoad() {
        super.viewDidLoad()

        self.userSearchController = UISearchController(searchResultsController: nil)
        self.userSearchController.dimsBackgroundDuringPresentation = true

        // This is used for dynamic search results updating while the user types
        // Requires UISearchResultsUpdating delegate
        self.userSearchController.searchResultsUpdater = self

        // Configure the search controller's search bar
        self.userSearchController.searchBar.placeholder = "Search for a user"
        self.userSearchController.searchBar.sizeToFit()
        self.userSearchController.searchBar.delegate = self
        self.definesPresentationContext = true

        // Set the search controller to the header of the table
        self.tableView.tableHeaderView = self.userSearchController.searchBar
    }

    // MARK: - Parse Backend methods

    func loadSearchUsers(searchString: String) {
        var query = PFUser.query()

        // Filter by search string
        query.whereKey("username", containsString: searchString)

        self.searchActive = true
        query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in

            if (error == nil) {
                self.searchUsers.removeAll(keepCapacity: false)
                self.searchUsers += objects as! [PFUser]
                self.tableView.reloadData()
            } else {
                // Log details of the failure
                println("search query error: \(error) \(error!.userInfo!)")
            }
            self.searchActive = false
        }
    }

    // MARK: - Search Bar Delegate Methods

    func searchBarSearchButtonClicked(searchBar: UISearchBar) {

        // Force search if user pushes button
        let searchString: String = searchBar.text.lowercaseString
        if (searchString != "") {
            loadSearchUsers(searchString)
        }
    }

    func searchBarCancelButtonClicked(searchBar: UISearchBar) {

        // Clear any search criteria
        searchBar.text = ""

        // Force reload of table data from normal data source
    }

    // MARK: - UISearchResultsUpdating Methods

    // This function is used along with UISearchResultsUpdating for dynamic search results processing
    // Called anytime the search bar text is changed
    func updateSearchResultsForSearchController(searchController: UISearchController) {

        let searchString: String = searchController.searchBar.text.lowercaseString
        if (searchString != "" && !self.searchActive) {
            loadSearchUsers(searchString)
        }
    }

    // MARK: - Table view data source

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

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if (self.userSearchController.active) {
            return self.searchUsers.count
        } else {
            // return whatever your normal data source is
        }
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("userCell") as! UserCell

        if (self.userSearchController.active && self.searchUsers.count > indexPath.row) {
            // bind data to the search results cell
        } else {
            // bind data from your normal data source
        }

        return cell
    }

    // MARK: - UITableViewDelegate

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        tableView.deselectRowAtIndexPath(indexPath, animated: true)

        if (self.userSearchController.active && self.searchUsers.count > 0) {
            // Segue or whatever you want
        } else {
            // normal data source selection
        }
    }
}


 类似资料:
  • 主要内容:解决问题的代理,搜索算法术语,搜索算法的属性,搜索算法的类型搜索算法是人工智能最重要的领域之一。本主题将解释有关AI中搜索算法的所有信息。 解决问题的代理 在人工智能中,搜索技术是普遍的问题解决方法。AI中的合理代理或问题解决代理主要使用这些搜索策略或算法来解决特定问题并提供最佳结果。解决问题的代理是基于目标的代理并使用原子表示。在本主题中,我们将学习各种解决问题的搜索算法。 搜索算法术语 搜索:搜索是一个一步一步的过程,用于解决给定搜索空间中的搜索问题。

  • 问题内容: 我在解析Json文件时遇到问题。尝试解析一个Json文件: 这是我为其定义的两个结构。 暂停结构: AttachedModel模型结构: 然后,我为其创建一个键和一个函数: 在功能上: 这是输出 问题是,即使有数据,该行也始终为假,并且转到“ 有人可以告诉我这里的问题在哪里吗? 问题答案: 为您的json创建此模型类: 然后,您可以像这样解析它:

  • 问题内容: 我是Swift的新手,正在上课学习iOS编程。我发现自己很困惑如何在字典数组中搜索字符串值并将字符串值转储到数组中。这是从我的Xcode游乐场获取的。 我正在尝试找出方法:1)搜索字典数组2)将搜索结果转储到数组(由我创建) 这些是角色字典。 这是上面列出的字符词典的数组。 这是我要编写的功能。 对于在此方面取得进展的任何帮助,我将不胜感激。我已经为示例进行了挖掘,但是我很快就会找到一

  • 问题内容: 我有这个代码 如何搜索? 问题答案: 正如简单地返回一个字典一样,您可以使用适用于字典的运算符: 编辑:要给出有关如何遍历数据的想法,请考虑以下示例: 检查数据结构将使您可以根据需要进行导航。您已经拥有的电话就是一个很好的起点。 Edit2:另一个尝试。这将获得您在词典列表中提到的文件。这样,我认为您应该能够使其适应您的需求。 然后 “在其中搜索”,执行以下操作:

  • 我正在使用Sitecore搜索数据库中的项目。

  • LDAP新手。我们LDAP的排列方式是人和组。这些人拥有用户信息,如姓名、uid和邮件。组有组名和multiple member字段,该字段的值为cn=first Last,cn=People,dc=comic,dc=com,列出了属于组的成员。 目前从userid和password开始,执行两个搜索:1)通过在People base domain上搜索uid=value来获取用户,然后从用户获得