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,