提示:一般商业 app 都不用系统的 UISearchController 的,最多用一个 searchBar,然后加到导航栏上,甚至都是用 textfield 自定义的搜索框。点击 searchBar 后,present 一个界面,animated 设为 false,新界面里有一个输入框 becomeFirstResponder,根据业务调整整个搜索界面。
import UIKit
class ViewController:UIViewController,UISearchBarDelegate {
var search:UISearchBar!
overridefunc viewDidLoad() {
super.viewDidLoad()
search =UISearchBar(frame:CGRect(x: 0, y:120, width:view.bounds.width, height:50))
// search.placeholder = "Please search here" //默认半透明显示文字
search.prompt ="backGround" //顶部居中文字做提示
search.barStyle = .black //黑色搜索框
// 关于tintColor和barTintColor请自行百度
search.tintColor =UIColor.blue //渲染颜色,包括加的控价,比如下面的scopeBar
// search.barTintColor = UIColor.red //背景色
// search.isTranslucent = true //半透明
// search.autocapitalizationType = .sentences // 首字母大写
// search.autocorrectionType = .yes // 自动纠错
search.keyboardType = .emailAddress //键盘类型
search.keyboardAppearance = .dark //键盘色
// search.keyCommands
search.showsCancelButton =true //有cancel按钮
// search.showsBookmarkButton = true //书本按钮
search.showsScopeBar =true //显示搜索栏下方选择栏
search.scopeButtonTitles = ["1234","1231234"] //搜索栏题目
search.selectedScopeButtonIndex =1 //初始scope是第几个的,默认第0个
// search.showsSearchResultsButton = true //下拉箭头
// search.isSearchResultsButtonSelected //是否选中了下拉箭头
search.delegate =self
view.addSubview(search)
}
//取消第一响应:如果点了别的地方,收键盘,注意 tableView 不能用这个收键盘
overridefunc touchesBegan(_ touches:Set<UITouch>, with event:UIEvent?) {
search.resignFirstResponder()
}
//searchBar回调函数使用方法大全
// 1. 选择的scope发生变化
func searchBar(_ searchBar:UISearchBar, selectedScopeButtonIndexDidChange selectedScope:Int) {
// print(selectedScope)
}
// 2. 实时监测输入的文字
func searchBar(_ searchBar:UISearchBar, textDidChange searchText:String) {
// print(searchText)
}
// 3. 点击了书签或其他东西的响应
func searchBarBookmarkButtonClicked(_ searchBar:UISearchBar) {
}
// 剩下的看函数名:
func searchBarCancelButtonClicked(_ searchBar:UISearchBar) {
}
func searchBarSearchButtonClicked(_ searchBar:UISearchBar) {
}
func searchBarResultsListButtonClicked(_ searchBar:UISearchBar) {
}
// 4. 是否开始编辑?返回值false则无响应不开始编辑,是点了那个框的响应
func searchBarShouldBeginEditing(_ searchBar:UISearchBar) ->Bool {
returntrue
}
func searchBarShouldEndEditing(_ searchBar:UISearchBar) ->Bool {
returntrue//返回false,则不能结束编辑。即取消第一响应不再起作用
}
// 5. 开始编辑状态下,开始写搜索内容时,即光标开始闪烁时
func searchBarTextDidBeginEditing(_ searchBar:UISearchBar) {
searchBar.text ="1234"
}
func searchBarTextDidEndEditing(_ searchBar:UISearchBar) {
// 正在输呢,手点了别的地方的响应
}
// 6. 把输的字处理后显示到框里。false,则输不进去字
func searchBar(_ searchBar:UISearchBar, shouldChangeTextIn range:NSRange, replacementText text:String) ->Bool {
// text 就是每次输的一个字符。例如:
if text=="s"{
return false//不让输 s
}
returntrue
}
}