前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >导航栏搜索框简单封装

导航栏搜索框简单封装

作者头像
星宇大前端
发布于 2019-10-25 01:20:08
发布于 2019-10-25 01:20:08
1.1K00
代码可运行
举报
文章被收录于专栏:大宇笔记大宇笔记
运行总次数:0
代码可运行

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/ZY_FlyWay/article/details/102619507

搜索框加入导航栏,代码简单封装,最后拿到搜索字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//
//  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()

    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS TabBarController实例
-(BaseNavigationController*)setTabBarItemWithRootVC:(id)vc Image:(NSString*)imgName SelectedImage:(NSString*)selectedImg { BaseNavigationController *nav = [[BaseNavigationController alloc] init]; [nav.tabBarItem setImage:[[UIImage imageNamed:imgNam
Lee坚武
2019/12/18
5020
手把手带你撸一个网易云音乐首页(三)
Hello, 大家好,今天准备和大家继续分享如何利用 Swift 来实现一个网易云音乐的首页;上俩篇文章文章发布以后,我收获了不少小伙伴的关注与点赞,同时也得到了一些非常有用的建议,在这里再次感谢大家的认可, 你们的鼓励与建议是我技术输出路上最大的动力。
HelloWorld杰少
2022/08/04
2.3K0
手把手带你撸一个网易云音乐首页(三)
Swift-MVVM 简单演练(一)
Swift-MVVM 简单演练(二) Swift-MVVM 简单演练(三) Swift-MVVM 简单演练(四) 前言 最近在学习swift和MVVM架构模式,目的只是将自己的学习笔记记录下来,方便自己日后查找,仅此而已!!! 本来打算一篇全部搞定的,但是简书每篇文章只能写大约不超过15000字的内容,因此只能分开写了。 如果有任何问题,欢迎和我一起讨论。当然如果有什么存在的问题,欢迎批评指正,我会积极改造的! ---- 这篇文章都写啥 自定义NavgationBar 抽取便利构造函数 初步的下拉刷新/上
用户1890628
2018/05/10
10.4K0
Swift 书面 ToDo App
下面的代码是使用的全部Xcode Version 6.0.1 (6A317)书面。
全栈程序员站长
2022/07/06
1.5K0
Swift 书面 ToDo App
iOS开发知识点
莫空9081
2023/10/16
1810
自学Swift之路(二)UITableView自定义和实际利用
本系列文章都是以有OC基础来写的,所以注释不会写太多,对基础不够了解的同学可能不太适合,另外本系列文章不是以教程式的形式来写,是记录学习过程的,所以不会有多少讲解 OK,承接上一篇文章,这次开始UIT
清墨
2018/05/07
2.4K0
自学Swift之路(二)UITableView自定义和实际利用
iOS开发实战之搜索控制器UISearchController使用
当tableView中的数据过多的时候,在tableView上加一个搜索框就变的很必要了,本文就讨论搜索控制器的使用,以及谓词的简单实现。
用户1219438
2018/12/26
2.8K0
【IOS开发基础系列】UISearch专题
        UISearchBar是由两个subView组成的,一个是UISearchBarBackGround,另一个是UITextField.
江中散人_Jun
2023/10/16
6060
【IOS开发基础系列】UISearch专题
UINavigationBar的用法
UINavigationBar是一个我们在开发中必定会碰到的控件,用好它能帮助我们自定义导航栏的样式,所以今天讲解一下UINavigationBar的用法。
Originalee
2018/08/30
2K0
iOS - Swift UISearchController仿微信搜索框
创建一个UISearchController 如果传入的searchResultsController为nil,则表示搜索的结果在当前控制器中显示,现在我让它在searchResultVC中显示 // 创建searchResultVC let searchResultVC = UIViewController() // 设置背景颜色为红色 searchResultVC.view.backgroundColor = UIColor.red let searchController = UISearchCont
LinXunFeng
2018/06/29
2K0
UI篇-UINavigationController之易忘补充
[UIApplication sharedApplication].statusBarHidden = YES;
進无尽
2018/09/12
2.2K0
UI篇-UINavigationController之易忘补充
iOS调整导航条BarButtonItem与titleView 的间距
与屏幕边界 或者与titleView 的间距 只要分别调整rightBarButtonItems 数组元素的顺序。
公众号iOS逆向
2021/08/25
2.2K0
iOS调整导航条BarButtonItem与titleView 的间距
iOS常用代码段
控制器中代码设置 > storybord设置 > 全局设置 优先级高的会覆盖优先级低的配置,比如storybord中的设置了navigationbar的样式 那么全局设置就不生效
码客说
2019/10/22
7910
Swift开发-代理
在iOS开发中经常会用到代理,Swift开发中的代理这样写: 1、首先定义一个协议 // swift中如何定义协议: 必须遵守NSObjectProtocol protocol VisitorViewDelegate : NSObjectProtocol{ // 登录回调 func loginBtnWillClick() // 注册回调 func regiserBtnWillClick() } 2、方法实现 func loginBtnClick(){ del
czjwarrior
2018/05/28
3880
IOS 导航栏 菜单栏 结合 常用
1 创建三个视图控制器:FirstViewController、SecondViewController和ThirdViewController 2、修改FirstViewController.swift的viewDidLoad override func viewDidLoad() { super.viewDidLoad()
用户5760343
2019/07/07
7150
iOS学习—— UINavigationController的返回按钮与侧滑返回手势的研究
侧滑返回手势是从iOS7开始增加的一个返回操作,经历了两年时间估计iPhone用户大部分都已经忽略了屏幕左上角那个碍眼的back按钮了。之前在网上搜过有关侧滑手势的技术博客,发现大多比较散乱,甚至有很多都是简单的粘贴复制,并不全面。侧滑返回的操作效果与左上角的back按钮是一样的,所以一起放在这里进行探讨。 导航栏左上角的back按钮是附着在UINavigationController的UINavigationBar里自带的一个返回按钮,导航栏自带的back按钮的图层结构如下图所示。一个UINavig
mukekeheart
2018/03/01
6.9K0
iOS学习—— UINavigationController的返回按钮与侧滑返回手势的研究
IOS 导航栏 UINavigationController 常用
1 创建:FirstViewController、SecondViewController 2、在FirstViewController的viewDidLoad设置属性 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. self.title = “第一页” self.view.backgroundColor = UIColor.brown self.navigationItem.rightBarButtonItem = UIBarButtonItem(title:”下一页”, style: UIBarButtonItemStyle.plain, target:self, action:
用户5760343
2019/07/07
1.1K0
iOS小技能:自定义导航栏,设置全局导航条外观
在开发需求时app中使用的导航条在一个模块的主题基本是一致的,因此可通过自定义导航条来进行统一控制。
玖柒的小窝
2021/11/02
2.5K0
iOS导航栏基础效果配置[通俗易懂]
若iOS7之后仍要使用第一种方法全局设置,则需要在plist文件中添加View controller-based status bar appearance 字段,值为NO ,意为不使用控制器管理状态栏。
全栈程序员站长
2022/07/21
1.6K0
去掉 iOS 导航栏返回按钮文本三种方案
方案一 自定义 UINavigationController 遵守 UINavigationBarDel 协议 实现下面方法: #pragma mark --------- UINavigationBarDelegate - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item { //设置导航栏返回按钮文字 UIBarButtonItem *bac
网罗开发
2021/06/24
2.5K0
相关推荐
iOS TabBarController实例
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文