Swift系列之——UISearchBar的简单使用

前端之家收集整理的这篇文章主要介绍了Swift系列之——UISearchBar的简单使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本篇博客的语法适用于Swift3.0以上。

UISearchBar是一个苹果自带搜索条,由一个文本框和几个按钮组成,当用户在文本框内输入部分内容之后,程序即可按照指定的规则执行搜索

下面是UISearchBar的长相:

//@H_301_8@
// ViewController.swift@H_301_8@
// UISearchBarTest@H_301_8@
//@H_301_8@
// Created by Mac on 2017/8/4.@H_301_8@
// Copyright © 2017年 Jing. All rights reserved.@H_301_8@
//@H_301_8@

import UIKit

class ViewController: UIViewController@H_301_8@,UITableViewDelegate@H_301_8@,UITableViewDataSource@H_301_8@,UISearchBarDelegate {

    var tableArray: NSArray@H_301_8@ = ["UI"@H_301_8@,"UIView"@H_301_8@,"View"@H_301_8@,"ViewController"@H_301_8@,"Controller"@H_301_8@,"UIViewController"@H_301_8@,"Search"@H_301_8@,"UISearchBar"@H_301_8@,"Swift"@H_301_8@]

    var searchArray: NSArray@H_301_8@ = []
    var isSearch = false@H_301_8@//默认在非搜索状态下@H_301_8@

    override func viewDidLoad() {
        super@H_301_8@.viewDidLoad@H_301_8@()
        // Do any additional setup after loading the view,typically from a nib.@H_301_8@

        self@H_301_8@.tableView@H_301_8@.tableHeaderView@H_301_8@ = self@H_301_8@.searchBar@H_301_8@;
        self@H_301_8@.view@H_301_8@.addSubview@H_301_8@(tableView);
    }

    override func didReceiveMemoryWarning() {
        super@H_301_8@.didReceiveMemoryWarning@H_301_8@()
        // Dispose of any resources that can be recreated.@H_301_8@
    }

    //使用懒加载方式来创建UITableView@H_301_8@
    lazy var tableView: UITableView@H_301_8@ = {
        let tempTableView = UITableView@H_301_8@ (frame: self@H_301_8@.view@H_301_8@.bounds@H_301_8@,style: UITableViewStyle.plain@H_301_8@)
        tempTableView.delegate@H_301_8@ = self@H_301_8@
        tempTableView.dataSource@H_301_8@ = self@H_301_8@
        tempTableView.tableFooterView@H_301_8@ = UIView@H_301_8@.init@H_301_8@()

        return@H_301_8@ tempTableView
    }()

    //使用懒加载方式来创建UISearchBar@H_301_8@
    lazy var searchBar: UISearchBar@H_301_8@ = {
        let tempSearchBar = UISearchBar@H_301_8@(frame:CGRect@H_301_8@(x: 0@H_301_8@,y: 64@H_301_8@,width: self@H_301_8@.view@H_301_8@.bounds@H_301_8@.size@H_301_8@.width@H_301_8@,height: 40@H_301_8@))
// tempSearchBar.prompt = "查找图书";@H_301_8@
        tempSearchBar.placeholder@H_301_8@ = "请输入搜索关键字"@H_301_8@;
        tempSearchBar.showsCancelButton@H_301_8@ = true@H_301_8@;
        tempSearchBar.delegate@H_301_8@ = self@H_301_8@

        return@H_301_8@ tempSearchBar
    }()

    //根据输入的关键字来过滤搜索结果@H_301_8@
    func filterBySubstring(filterStr: NSString@H_301_8@!) {
        isSearch = true@H_301_8@
        let predicate = NSPredicate(format: "SELF CONTAINS[c] %@"@H_301_8@,filterStr)
        searchArray = tableArray.filtered@H_301_8@(using: predicate) as NSArray@H_301_8@
        tableView.reloadData@H_301_8@()
    }

    //MARK: UITableViewDelegate@H_301_8@
    func numberOfSections(in tableView: UITableView@H_301_8@) -> Int {
        return@H_301_8@ 1@H_301_8@
    }

    func tableView(_ tableView: UITableView@H_301_8@,numberOfRowsInSection section: Int) -> Int {
        if@H_301_8@ isSearch {
            return@H_301_8@ searchArray.count@H_301_8@
        }
        else@H_301_8@{
            return@H_301_8@ tableArray.count@H_301_8@
        }
    }

    func tableView(_ tableView: UITableView@H_301_8@,cellForRowAt indexPath: IndexPath) -> UITableViewCell@H_301_8@ {

        let identifier = "cellId"@H_301_8@
        var cell = tableView.dequeueReusableCell@H_301_8@(withIdentifier: identifier)

        if@H_301_8@ cell == nil@H_301_8@ {
            cell = UITableViewCell@H_301_8@.init@H_301_8@(style: UITableViewCellStyle.default@H_301_8@,reuseIdentifier: identifier)
        }

        let row = indexPath.row@H_301_8@
        if@H_301_8@ isSearch {
            cell?.textLabel@H_301_8@?.text@H_301_8@ = searchArray[row] as? String
        }
        else@H_301_8@{
            cell?.textLabel@H_301_8@?.text@H_301_8@ = tableArray[row] as? String
        }

        return@H_301_8@ cell!
    }

    //MARK: UISearchBarDelegate@H_301_8@
    func searchBarCancelButtonClicked(_ searchBar: UISearchBar@H_301_8@) {
        isSearch = false@H_301_8@
        searchBar.resignFirstResponder@H_301_8@()
        tableView.reloadData@H_301_8@()
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar@H_301_8@) {
        filterBySubstring(filterStr: searchBar.text@H_301_8@! as NSString@H_301_8@)
    }

    func searchBar(_ searchBar: UISearchBar@H_301_8@,textDidChange searchText: String) {
        filterBySubstring(filterStr: searchText as NSString@H_301_8@)
    }

}

猜你在找的Swift相关文章