iOS UISearchBar搜索组件使用指南

iOS 里的搜索功能,UISearchBar可以说是个老朋友了。用它配合UITableView做本地搜索,响应快,用户体验也挺顺滑。如果你刚接触这块儿,建议先搞清楚它的结构,像搜索框、取消按钮、占位提示这些,用起来都挺直观的。

直接用代码拉一个出来也不麻烦:

let searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 44))
view.addSubview(searchBar)

配个placeholder提示语,比如“输入搜索关键词”,就算是一个比较完整的展示了。想进一步控制行为,就得上代理——UISearchBarDelegate。监听输入变化啊,点搜索按钮啊,取消搜索啊,都是用这个搞定。

下面这段代理代码你用得上:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
  // 过滤数据刷新表格
}

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { // 执行搜索操作 }

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { // 清除搜索状态 }

集成到表格里也挺自然的,监听textDidChange,动态过滤数据源,reloadData(),搜索结果马上更新,效果直接。

不过,UISearchController才是现在更推荐的方案。它不仅管搜索框,还把搜索结果界面也包了,动画也更丝滑:

let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.delegate = self
tableView.tableHeaderView = searchController.searchBar

实现updateSearchResults方法搞定搜索逻辑,页面切换也干净利落。

如果你还没用过UISearchController,可以先用UISearchBar练手,等熟了再升级。不着急,掌握得稳才是重点。

zip
SuoTableView 1.zip 预估大小:84个文件
folder
SuoTableView 1 文件夹
folder
SuoTableViewTests 文件夹
file
SuoTableViewTests.m 660B
file
SuoTableViewTests-Info.plist 691B
folder
en.lproj 文件夹
file
InfoPlist.strings 45B
file
.DS_Store 6KB
folder
SuoTableView 文件夹
file
ViewController.m 8KB
file
.DS_Store 6KB
file
car.plist 1KB
file
Car.m 345B
file
SuoTableView-Prefix.pch 344B
folder
en.lproj 文件夹
file
InfoPlist.strings 45B
file
bg.png 278KB
file
main.m 346B
file
pinyin.h 457B
folder
Base.lproj 文件夹
file
Main.storyboard 4KB
folder
Images.xcassets 文件夹
folder
LaunchImage.launchimage 文件夹
file
Contents.json 442B
folder
AppIcon.appiconset 文件夹
file
Contents.json 333B
file
ViewController.h 632B
file
pinyin.c 21KB
file
AppDelegate.h 286B
file
SuoTableView-Info.plist 1KB
file
Car.h 392B
file
AppDelegate.m 2KB
folder
.git 文件夹
folder
logs 文件夹
file
HEAD 177B
folder
refs 文件夹
folder
heads 文件夹
file
master 177B
file
.DS_Store 6KB
folder
info 文件夹
file
exclude 40B
file
index 3KB
file
COMMIT_EDITMSG 15B
folder
objects 文件夹
folder
66 文件夹
file
4dbc7fb1c0fa318c9ea5c2899530c1aefe1ace 108B
folder
pack 文件夹
folder
25 文件夹
file
60a2b9ab9323ca61a0fdebd3b4af46dbe4c272 100B
folder
0a 文件夹
file
bb9dc741e908660bd87ea1aed2283886fcb93e 318B
folder
4e 文件夹
file
060d470a758f30989294f247497876cba78884 68B
folder
6c 文件夹
file
fc746d4ecf2e3ac67bb0cf6c4013e1aff9b1f1 58B
folder
02 文件夹
file
37597b848a1890bb30ba0ff4102f8107cafdcb 61B
folder
info 文件夹
folder
a2 文件夹
file
847fb4402ea91e661fe296da3746751648b056 346B
folder
98 文件夹
file
9dd9b2808cdffcc2710110aad524c4313075de 543B
file
1e69e3e6db3a93eff9a563bfb9bb7e8e362057 60B
folder
bb 文件夹
file
238c573d77e359919553b69f858ec1ddad5871 131B
folder
82 文件夹
file
a2bb45076d290ce7461b28d5a579e649777779 247B
folder
f3 文件夹
file
68084f5be96e9f67779f0574ff7734a5108530 318B
folder
f7 文件夹
file
46dae1837ed733288621745ac3420af56a15de 141B
folder
be 文件夹
file
d1c2b305b7da3c1f9c8536b8b7cd24e8a01989 502B
file
4c17955221afbd491e5b1f7906743b7261ea4a 138B
folder
c8 文件夹
file
be049d7f0ff0de4541f193ef45c805ebb69567 277KB
file
f88b4fbcf8996c7c13e7366b604b81c4abc560 119B
folder
5d 文件夹
file
6390f36b46934cb72d98ef1dfa15efed00e0c8 357B
folder
cc 文件夹
file
cbfe2e1c2a812b4da08d1a1a5ee8e04dc6ca71 861B
folder
dc 文件夹
file
e5b67e2bb20b00dccfed19b682eb5026ad9ca5 13KB
folder
54 文件夹
file
b9872963e4a66f15ce99d6e745af5935b14ede 225B
folder
3c 文件夹
file
6ebaa31424a1dc82b3565b21dcf79f96f11ff4 134B
folder
6f 文件夹
file
4d7ee5e30acec58b635f97c37757a000ea8f22 176B
file
3b0ab36651ca648408c176f81e4b2e202efa0b 58B
folder
a3 文件夹
file
96706db4ec4cfca4d984d38b90dc8098bded40 147B
folder
47 文件夹
file
7b28ff8f86a3158a71c4934fbd3a2456717d7a 61B
folder
b9 文件夹
file
9208bd7744e8e16f519addd60651d2925c1796 735B
folder
19 文件夹
file
3ffd99b1c41f816e7cf6d9e1f83c0b76ef8b9b 367B
folder
e2 文件夹
file
81049fb6dee33450df27de62377a62d0f20a6f 156B
folder
38 文件夹
file
f30cc3ebd5a881ecc61ec7b455794c4197241f 265B
folder
13 文件夹
file
392fd092dccb452b939f908c4110993bd64243 363B
folder
05 文件夹
file
50a8c6b707b50706335fd183a192a9078f5e0b 52B
folder
bd 文件夹
file
6c8deab1e3a61007f79e1c6cbf2a01ffc8556d 4KB
folder
c7 文件夹
file
9ebd3ada1309bae694b8e6760592b1254e035c 187B
folder
37 文件夹
file
b11e83983ec3947554b2894ac14cc7a14ce9f4 173B
folder
f9 文件夹
file
7ece55691149626907da6b9685cc5999123f76 58B
folder
e7 文件夹
file
4593ddfa2a6792c053e3c6a38f247b9bd03a51 907B
file
HEAD 23B
file
config 138B
folder
refs 文件夹
folder
heads 文件夹
file
master 41B
folder
tags 文件夹
folder
branches 文件夹
folder
hooks 文件夹
file
pre-applypatch.sample 398B
file
pre-push.sample 1KB
file
commit-msg.sample 896B
file
pre-commit.sample 2KB
file
applypatch-msg.sample 452B
file
prepare-commit-msg.sample 1KB
file
update.sample 4KB
file
post-update.sample 189B
file
pre-rebase.sample 5KB
file
description 73B
folder
SuoTableView.xcodeproj 文件夹
folder
project.xcworkspace 文件夹
file
contents.xcworkspacedata 157B
folder
xcuserdata 文件夹
folder
will.xcuserdatad 文件夹
file
UserInterfaceState.xcuserstate 22KB
folder
xcuserdata 文件夹
folder
will.xcuserdatad 文件夹
folder
xcdebugger 文件夹
file
Breakpoints_v2.xcbkptlist 3KB
folder
xcschemes 文件夹
file
SuoTableView.xcscheme 4KB
file
xcschememanagement.plist 574B
file
project.pbxproj 22KB
...
zip 文件大小:667.38KB