在自动完成本地搜索中集成分页

Posted

技术标签:

【中文标题】在自动完成本地搜索中集成分页【英文标题】:integrate paging in autocomplete local searching 【发布时间】:2017-01-18 11:56:21 【问题描述】:

我正在从存储在文档目录中的文件中读取 json 数据,结果数据数组的计数超过 1,30,000。

我已经实现了自动搜索方法,以根据现有数据过滤数据,以输入数据开头,即前缀谓词,这将在每个文本字段键事件上执行。

由于我无法为每个搜索执行完整的循环,所以我为每 12 个找到的结果打破循环并重新加载到 tableview。 我的要求是如何实现分页,以便在滚动时添加并重新加载下一个找到的数据。

func searchAutocompleteEntriesWithSubstring(_ substring:     String,textfield:UITextField)

    self.autoCompletesCompnies.removeAll(keepingCapacity: false)

    searchQueue = DispatchQueue.global(qos: .default)
    searchQueue!.async
        

        for comp in self.companies!
        
            var myString:NSString! = (comp.orgDescription! as NSString).lowercased as NSString!
            myString = myString.trimmingCharacters(in: .whitespaces) as NSString!
            let searchString = substring.trimmingCharacters(in: .whitespaces).lowercased()
            let substringRange :NSRange! = myString.range(of: searchString)

            if (substringRange.location  == 0)
            
                if !self.autoCompletesCompnies.contains(comp)
                
                self.autoCompletesCompnies.append(comp)
                
                DispatchQueue.main.sync
                
                    print("autocompanies count after search ========\(self.autoCompletesCompnies.count)")
                    self.autocompleteTableView.reloadData()
                    //self.autocompleteTableView.isHidden = false 
                    if self.autoCompletesCompnies.count>0
                    
                        print("is thread suspended \(self.isSuspended)")
                        if !(self.isSuspended!)
                         do 
                          self.tableViewdesignFunc(textfield)
                         
                        
                        else
                        
                            self.autocompleteTableView.isHidden = true
                            self.autoCompletesCompnies.removeAll(keepingCapacity: false)
                        
                    
                
            
            if self.autoCompletesCompnies.count > 12
            
                break
            
        


    




【问题讨论】:

您需要在用户向下滚动时添加一些新值来更新数据。我说的对吗? @the_dahiya_boy - 是的 【参考方案1】:

使用此代码

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) 
        let lastElement = dataSource.count - 1
        if indexPath.row == lastElement 
            // handle your logic here to get more items, add it to dataSource and reload tableview
                
    

编辑

添加堆栈溢出答案。

在这里我得到了某人的 Stack 答案,请继续阅读以了解更多具体细节load-more-options-with-uitableview

【讨论】:

以上是关于在自动完成本地搜索中集成分页的主要内容,如果未能解决你的问题,请参考以下文章

如何像 Apple 的本地地图应用程序那样进行本地搜索自动完成?

如何制作 - 自动完成搜索全局而不是本地

使用 jQuery Mobile 自动完成谷歌地图

使用 json 数据自动完成建议和搜索

限制 ajax 自动完成结果

jQuery UI 自动完成使用startsWith