1. 程式人生 > >Swift系列之——UISearchBar的簡單使用

Swift系列之——UISearchBar的簡單使用

本篇部落格的語法適用於Swift3.0以上。

UISearchBar是一個蘋果自帶的搜尋條,由一個文字框和幾個按鈕組成,當用戶在文字框內輸入部分內容之後,程式即可按照指定的規則執行搜尋。

下面是UISearchBar的長相:

這裡寫圖片描述

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

import UIKit

class ViewController: UIViewController, UITableViewDelegate
, UITableViewDataSource, UISearchBarDelegate { var tableArray: NSArray = ["UI", "UIView", "View", "ViewController", "Controller", "UIViewController"
, "Search", "UISearchBar", "Swift"] var searchArray: NSArray = [] var isSearch = false//預設在非搜尋狀態下 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib.
self.tableView.tableHeaderView = self.searchBar; self.view.addSubview(tableView); } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //使用懶載入方式來建立UITableView lazy var tableView: UITableView = { let tempTableView = UITableView (frame: self.view.bounds, style: UITableViewStyle.plain) tempTableView.delegate = self tempTableView.dataSource = self tempTableView.tableFooterView = UIView.init() return tempTableView }() //使用懶載入方式來建立UISearchBar lazy var searchBar: UISearchBar = { let tempSearchBar = UISearchBar(frame:CGRect(x: 0, y: 64, width: self.view.bounds.size.width, height: 40)) // tempSearchBar.prompt = "查詢圖書"; tempSearchBar.placeholder = "請輸入搜尋關鍵字"; tempSearchBar.showsCancelButton = true; tempSearchBar.delegate = self return tempSearchBar }() //根據輸入的關鍵字來過濾搜尋結果 func filterBySubstring(filterStr: NSString!) { isSearch = true let predicate = NSPredicate(format: "SELF CONTAINS[c] %@", filterStr) searchArray = tableArray.filtered(using: predicate) as NSArray tableView.reloadData() } //MARK: UITableViewDelegate func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if isSearch { return searchArray.count } else{ return tableArray.count } } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let identifier = "cellId" var cell = tableView.dequeueReusableCell(withIdentifier: identifier) if cell == nil { cell = UITableViewCell.init(style: UITableViewCellStyle.default, reuseIdentifier: identifier) } let row = indexPath.row if isSearch { cell?.textLabel?.text = searchArray[row] as? String } else{ cell?.textLabel?.text = tableArray[row] as? String } return cell! } //MARK: UISearchBarDelegate func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { isSearch = false searchBar.resignFirstResponder() tableView.reloadData() } func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { filterBySubstring(filterStr: searchBar.text! as NSString) } func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { filterBySubstring(filterStr: searchText as NSString) } }

相關推薦

Swift系列——UISearchBar簡單使用

本篇部落格的語法適用於Swift3.0以上。 UISearchBar是一個蘋果自帶的搜尋條,由一個文字框和幾個按鈕組成,當用戶在文字框內輸入部分內容之後,程式即可按照指定的規則執行搜尋。 下面是UISearchBar的長相: // // View

swift系列UIButton】簡單使用

override func viewDidLoad() { super.viewDidLoad() let button = UIButton.buttonWithType(UIButtonType.System) as! UIButton

Linux系列防火牆簡單配置

環境:CentOS 7 以上 CentOS 7 版本以上預設的防火牆不是iptables,而是firewalle. 因此CentOS 7 以下的 iptables 的配置不能使用。 檢視防火牆狀態: systemctl status firewalld &nbs

後端開發實踐系列四——簡單可用的CQRS編碼實踐

本文只講了一件事情:軟體模型中存在讀模型和寫模型之分,CQRS便為此而生。 20多年前,Bertrand Meyer在他的《Object-Oriented Software Construction》一書中提出了CQS(Command Query Seperation,命令查詢分離)的概念,指出: Ever

(原創)我眼中的設計模式系列簡單工廠模式(一)

int 業務 text 們的 acc 現在 rgs sub reat 簡單工廠模式   在日常的軟件開發中,我們一般都是按照模塊來劃分工作的。 場景一:   試想我們現在有這麽一個模塊,為其他的模塊提供服務,比如說我們調用了好幾個外部接口,統一返回XML字符串,每個接口返回

Kubernetes學習系列簡單叢集安裝與配置

環境配置 CentOS Linux release 7.3.1611 (Core)  etcd-v3.2.6 docker-ce-17.03.2.ce kubernetes-v1.6.9 192.168.108.128 節點1 192.168.108.129 節點2 19

Django入門系列(Django簡介和rom簡單介紹)

1 django中app的概念: 大學:----------------- 專案 資訊學院 ----------app01 物理學院-----------app02 ****強調***:建立了app,要在配置檔案中註冊 ...2 模板路徑配置: 1 templates資料夾 2 settings裡註冊一下 3

DJANGO入門系列(模板層的簡單介紹和視圖層的掃尾)

dir 解析 http eth endif () 查詢 文件上傳 lte 昨日回顧:1 虛擬環境 -1 pycharm裏創建 -2 用命令串講2 視圖層: 1 Request對象---GET,POST,method,body,FILES,META,path(只是

設計模式回顧系列簡單工廠模式

operate void emp pub 具體類 有著 ogr etop ima 簡單工廠模式,需要說明的是,它並不屬於GOF 23種設計模式中的一種。但它卻豐富了工廠模式家族,因為其簡單的思想和使用方式,也有很廣泛的使用 簡單工廠模式又稱為靜態工廠模式,它用來確定創建哪一

我不想成為鹹魚系列字串建立方式及記憶體的簡單分析

前言:今天不學習,明天變鹹魚 我們都知道建立字串的方式有兩種(基本的建立方式,clone序列化...不考慮) a.String s1 = "asdf"; b.String s2 = new String("asdf"); 我們首先分析下他在記憶體中的分配情況: 對於s1來說他

SSM整合系列 整合Quartz簡單實現任務排程

1.摘要:Quartz是Java領域的開源任務排程工具,是一個任務排程框架,通過觸發器設定作業的定時執行規則,來執行定時任務。在專案中使用頻繁,本文將在SSM整合專案上整合Quartz框架實現任務排程。 基礎專案的搭建參考文章:https://blog.csdn.net/caiqing1

iOS監聽模式系列NSNotificationCenter的簡單使用

NSNotificationCenter 對於這個沒必要多說,就是一個訊息通知機制,類似廣播。觀察者只需要向訊息中心註冊感興趣的東西,當有地方發出這個訊息的時候,通知中心會發送給註冊這個訊息的物件。這樣也起到了多個物件之間解耦的作用。蘋果給我們封裝了這個NSNotifica

sock5系列簡單測試sock5 連通性!(二)

先說一個感念性的名詞---TPC半連結(TPC的三次握手) 在TCP/IP協議中,TCP協議提供可靠的連線服務,採用三次握手建立一個連線。  第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;第二次握手:伺服器收到

簡單的程式詮釋C++ STL算法系列十:search

      C++STL的非變易演算法(Non-mutating algorithms)是一組不破壞操作資料的模板函式,用來對序列資料進行逐個處理、元素查詢、子序列搜尋、統計和匹配。       search演算法函式在一個序列中搜索與另一序列匹配的子序列。它有如下兩個原型

簡單的程式詮釋C++ STL算法系列十三:copy

       前面十二個演算法所展現的都屬於非變易演算法(Non-mutating algorithms)系列,現在我們來看看變易演算法。所謂變易演算法(Mutating algorithms)就是一組能夠修改容器元素資料的模板函式,可進行序列資料的複製,變換等。     

WordPress解析系列原始碼載入架構簡單解讀

WordPress原始碼載入基本路徑: 路徑順序:index.php->wp-blog-header.php->wp-load.php->wp-config.php->wp-settings.php index.php: 描述:前端入口,基本沒有

RNN系列三 RNN簡單應用

1.語言模型    將以語言模型進行分析。建立語言模型所採用的訓練集是一個大型的語料庫(Corpus)。建立過程中,需要先建立一個字典,之後將語料庫中每個詞表示為對應的one-hot向量。此外需要額外定義一個標記EOS(End Of Sentence)表示一個句子的結尾,也可

白話系列IOC,三個類實現簡單的Ioc

前言:部落格園上已經有很多IOC的部落格.而且很多寫的很好,達到開源的水平,但是對於很多新人來說,只瞭解ioc的概念,以及怎麼去使用ioc.然後想更進一步去看原始碼,但是大部分原始碼都比較困難,當不知道一個框架整體時候,從每一個片段去推理,其實很耗費時間,所以這篇部落格,從autofac及.netcore自帶

redis系列------簡單的動態字串(SDS)

前言 Redis 沒有直接使用 C 語言傳統的字串表示(以空字元結尾的字元陣列,以下簡稱 C 字串), 而是自己構建了一種名為簡單動態字串(simple dynamic string,SDS)的抽象型別, 並將 SDS 用作 Redis 的預設字串表示。 個人感覺SDS類似於Java的ArrayList,