美文网首页
iOS Tableview实现searchBar和字母索引

iOS Tableview实现searchBar和字母索引

作者: ldclll | 来源:发表于2016-09-28 13:10 被阅读1289次

    在开发过程中,当app需要显示大量用户的时候,想要查找到某一个用户显然没有那么容易。参考iOS原生的通讯录我们可以发现,查找用户可以用searchBar来精确匹配字段,也可以用sectionIndex来定位一个范围。

    searchBar的代理方法

    //当按下搜索按钮时进入这个方法
    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
            self.view.endEditing(true)
    
            searchNumAry = NSMutableArray()
            
            let ary:NSArray = userAry as! NSArray
            
            //循环遍历(当用户量非常大的时候就需要用到算法了,不然会卡线程)
            for i in 0 ..< ary.count {
                
                let dic:NSDictionary = ary[i] as! NSDictionary
                
                let str = (dataDic["name"]) as! String
                
                //匹配字段
                if (str.range(of: searchBar.text!) != nil) {
    
                    //匹配到的用户下标记下来
                    searchNumAry.add(NSNumber.init(value: i))
    
                }
            }
            
            print(searchNumAry)
            
            self.tableview.reloadData()
     }
        
    //当输入框字段改变时进入这个方法
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
            //判断搜索栏输入框是否有文字
            if (searchBar.text == "") {
                self.tableview.reloadData()
            }
    }
    

    下面是sectionIndex的用法

    //设置索引的标题
    func sectionIndexTitles(for tableView: UITableView) -> [String]? {
            if sectionAry.count != 0 {
                return sectionAry
            } else {
                return [""]
            }
    }
    
    //设置section的标题
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
            if sectionAry.count != 0 {
                if self.searchBar.text == "" {
                    return sectionAry[section]
                } else {
                    return ""
                }
            } else {
                return ""
            }
    }
    
    func numberOfSections(in tableView: UITableView) -> Int {
            if self.searchBar.text == "" {
                if sectionAry.count != 0 {
                    return sectionAry.count
                } else {
                    return 0
                }
            } else {
                return 1
            }
        }
    
    
    

    实现了上面的代码后,在这两个方法中做相应的判断修改即可得到想要的效果了

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    

    相关文章

      网友评论

          本文标题:iOS Tableview实现searchBar和字母索引

          本文链接:https://www.haomeiwen.com/subject/jqihyttx.html