1. 首页
  2. 学习笔记

Swift 搜索框(UISearchBar)实现简单的搜索功能

1.在storyboard里面拖入一个 Search Bar 和 一个 tableView。
2.创建ViewController,实现代理:UISearchBarDelegate,UITableViewDataSource,UITableViewDelegate.
代码实现如下:

    @IBOutlet weak var searchCt: UISearchBar!

    var contacts = [Contact] ()
    
    // 搜索匹配的结果,Table View使用这个数组作为datasource
    var seres:[Contact] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()

        self.searchCt.showsCancelButton = false;
        self.searchCt.delegate = self
        self.tableView.delegate = self
        self.tableView.dataSource = self

        seres = contacts
    }

// tableview 代理方法

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.result.count
}

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

    let identify: String = "cell"

    let cell = tableView.dequeueReusableCellWithIdentifier(identify, forIndexPath: indexPath) as UITableViewCell
    cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
    cell.textLabel?.text = self.seres[indexPath.row]

    return cell
}

// UISearchBar 代理方法
// 每次改变搜索内容时候调用此方法

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
        searchCt.showsCancelButton = true;
    }
    
    // 搜索代理UISearchBarDelegate方法,每次改变搜索内容时都会调用
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        //print(searchText)
        // 没有搜索内容时显示全部组件
        if searchText == "" {
            self.seres = self.contacts
        }
        else { // 匹配用户输入内容的前缀(不区分大小写)
            self.seres = []
            for tmp in self.contacts {
                if (tmp.name?.lowercased().hasPrefix(searchText.lowercased()))! {
                    self.seres.append(tmp)
                }
            }
        }
        // 刷新Table View显示
        self.tableView.reloadData()
    }
    /*
    // 搜索代理UISearchBarDelegate方法,点击虚拟键盘上的Search按钮时触发
     func searchBarSearchButtonClicked(searchBar: UISearchBar) {
        searchBar.resignFirstResponder()
     }
    */
    
    // 取消按钮触发事件
    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        searchCt.showsCancelButton = false;
        searchCt.text = ""
        self.seres = self.contacts
        searchCt.resignFirstResponder()
        self.tableView.reloadData()
    }

 

评分 0, 满分 5 星
0
0
看完收藏一下,下次也能找得到
  • 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
  • 文章链接:http://www.carlstedt.cn/archives/1391 (转载时请注明本文出处及文章链接)
上一篇:
:下一篇

发表评论

gravatar

快来吐槽一下吧!

  1. .01 4:06
  2. .02 1:47
  3. .03 3:39
  4. .04 1:40