版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ZY_FlyWay/article/details/102619507
搜索框加入导航栏,代码简单封装,最后拿到搜索字符串。
//
// NavigationSearchItemHelper.swift
// NVRCloudIOS
//
// Created by Nvr on 2018/11/16.
// Copyright © 2018 zhangyu. All rights reserved.
//
typealias StringCallBack = (String) -> Void
import UIKit
@objc protocol NavSearchBtnClickProtocol {
@objc func searchNavClick()
}
class NavigationSearchItemHelper: NSObject {
var searchBar: UISearchBar?
var searchItem: UIBarButtonItem!
//需要添加searchItem到导航栏的控制器
var vc: UIViewController?
var searchStringCallBack: StringCallBack!
var delegate: NavSearchBtnClickProtocol?
var placeHolder: String = ""
var title = ""
var searchBarX:CGFloat = 65
var hasBackBarItem = true
func addSearchItem(serachDelegate: UIViewController,vcTitle:String, searchPlaceholder: String,hasBackItem:Bool = true, callBack:@escaping StringCallBack) {
searchStringCallBack = callBack
placeHolder = searchPlaceholder
vc = serachDelegate
title = vcTitle
delegate = vc as? NavSearchBtnClickProtocol
hasBackBarItem = hasBackItem
addSerchItem()
addSearchBar()
}
func addSerchItem() {
searchItem = UIBarButtonItem.init(image: #imageLiteral(resourceName: "nav_btn_search_sel"), style: .plain, target: vc, action: #selector(delegate?.searchNavClick))
vc?.navigationItem.rightBarButtonItem = searchItem
}
func addSearchBar() {
if hasBackBarItem {
searchBarX = 65
}else{
searchBarX = 10
}
searchBar = UISearchBar.init(frame: CGRect(x: searchBarX, y: 5, width: screen_width - 20, height: (vc?.navigationController?.navigationBar.frame.height)! - 10))
searchBar?.barTintColor = UIColor.clear
if let textfiled = searchBar?.subviews.first?.subviews.last as? UITextField {
textfiled.tintColor = UIColor.textFeildTint
textfiled.font = UIFont.systemFont(ofSize: 14)
}
searchBar?.tintColor = UIColor.white
searchBar?.delegate = self
searchBar?.placeholder = placeHolder
searchBar?.isHidden = true
if let bar = searchBar{
vc?.navigationController?.navigationBar.addSubview(bar)
}
}
}
// MARK: UISearchBarDelegate
extension NavigationSearchItemHelper: UISearchBarDelegate {
func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
searchBar.showsCancelButton = true
return true
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
vc?.title = title
searchBar.showsCancelButton = false
searchBar.isHidden = true
vc?.navigationItem.rightBarButtonItem = searchItem
searchBar.resignFirstResponder()
//取消点击后重新加载数据
searchStringCallBack("")
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchStringCallBack(searchBar.text ?? "")
searchBar.resignFirstResponder()
}
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有