小码哥-玩转【斗鱼直播APP】系列之首页导航栏设置
首页导航栏设置
重点掌握内容
- 导航栏添加Items
- 给系统的类扩充方法
- 扩充
便利
构造函数
效果展示
- 在iOS开发中,导航栏的设置是必不可少的一部分。
- 通常导航栏中会放很多的UIBarButtonItem,以方便用于操作对应的功能
- 斗鱼首页导航条展示
直接实现(最low方式)
- 不管是左侧logo的Item,还是右侧的三个Item都是有点击效果的。
- 因此在实现时,最好创建UIButton,通过给UIButton设置图片来实现。并且让UIButton作为UIBarButtonItem的customView
- 实现代码如下:
// MARK:- 设置导航栏内容
extension HomeViewController {
// MARK: 设置导航栏
private func setupNavigationBar() {
setupNavigationLeftBar()
setupNavigationRightBar()
}
private func setupNavigationLeftBar() {
let btn = UIButton()
btn.setImage(UIImage(named: "logo"), forState: .Normal)
btn.sizeToFit()
btn.addTarget(self, action: #selector(self.leftItemClick), forControlEvents: .TouchUpInside)
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: btn)
}
private func setupNavigationRightBar() {
// 1.确定UIButton的尺寸
let size = CGSize(width: 40, height: 44)
// 2.创建历史的Item
let historyBtn = UIButton()
historyBtn.setImage(UIImage(named: "image_my_history"), forState: .Normal)
historyBtn.setImage(UIImage(named: "image_my_history_click"), forState: .Highlighted)
historyBtn.addTarget(self, action: #selector(self.historyItemClick), forControlEvents: .TouchUpInside)
historyBtn.frame = CGRect(origin: CGPointZero, size: size)
let historyItem = UIBarButtonItem(customView: historyBtn)
// 3.创建搜索的Item
let searchBtn = UIButton()
searchBtn.setImage(UIImage(named: "btn_search"), forState: .Normal)
searchBtn.setImage(UIImage(named: "btn_search_clicked"), forState: .Highlighted)
searchBtn.addTarget(self, action: #selector(self.searchItemClick), forControlEvents: .TouchUpInside)
searchBtn.frame = CGRect(origin: CGPointZero, size: size)
let searchItem = UIBarButtonItem(customView: searchBtn)
// 4.创建二维码的Item
let qrcodeBtn = UIButton()
qrcodeBtn.setImage(UIImage(named: "image_scan"), forState: .Normal)
qrcodeBtn.setImage(UIImage(named: "image_scan_click"), forState: .Highlighted)
qrcodeBtn.addTarget(self, action: #selector(self.qrCodeItemClick), forControlEvents: .TouchUpInside)
qrcodeBtn.frame = CGRect(origin: CGPointZero, size: size)
let qrcodeItem = UIBarButtonItem(customView: qrcodeBtn)
navigationItem.rightBarButtonItems = [historyItem, searchItem , qrcodeItem]
}
// MARK: 导航栏的事件处理
@objc private func leftItemClick() {
print("点击了logo")
}
@objc private func qrCodeItemClick() {
print("点击了二维码")
}
@objc private func searchItemClick() {
print("点击了搜索")
}
@objc private func historyItemClick() {
print("点击了历史")
}
}
优化上述代码(系统类扩充方法)
- 上述方式虽然实现了功能,但是我们发现重复代码太多。
- 并且如果其他地方也用到类似的功能,还是要写大量代码。
- 最好的方式就是进行抽取?
- 如何抽取呢?
- 在OC中我们通常给系统的类抽取分类,在分类中给系统的类扩充方法
- Swift也是类似,只是Swift使用extension,表示对系统的类进行扩充
- 比如我们给系统的类抽取类方法,代码如下:
- 给系统类扩充类方法
extension UIBarButtonItem {
class func createBarButtonItem(imageName : String, highImageName : String = "", size : CGSize = CGSizeZero, target : AnyObject? = nil, action : Selector = nil) -> UIBarButtonItem {
// 1.创建UIButton
let btn = UIButton(type: .Custom)
// 2.给UIButton设置属性
btn.setImage(UIImage(named: imageName), forState: .Normal)
if highImageName != "" {
btn.setImage(UIImage(named: highImageName), forState: .Highlighted)
}
// 3.设置尺寸
if size == CGSizeZero {
btn.sizeToFit()
} else {
btn.frame = CGRect(origin: CGPointZero, size: size)
}
// 4.监听点击
btn.addTarget(target, action: action, forControlEvents: .TouchUpInside)
return UIBarButtonItem(customView: btn)
}
}
- 使用方式:
// MARK: 设置导航栏
private func setupNavigationBar() {
setupNavigationLeftBar()
setupNavigationRightBar()
}
private func setupNavigationLeftBar() {
navigationItem.leftBarButtonItem = UIBarButtonItem.createBarButtonItem("logo", target: self, action: #selector(self.leftItemClick))
}
private func setupNavigationRightBar() {
let size = CGSize(width: 40, height: 44)
let historyItem = UIBarButtonItem.createBarButtonItem("image_my_history", highImageName: "image_my_history_click", size: size, target: self, action: #selector(self.historyItemClick))
let searchItem = UIBarButtonItem.createBarButtonItem("btn_search", highImageName: "btn_search_click", size: size, target: self, action: #selector(self.searchItemClick))
let qrCodeItem = UIBarButtonItem.createBarButtonItem("image_scan", highImageName: "image_scan_click", size: size, target: self, action: #selector(self.qrCodeItemClick))
navigationItem.rightBarButtonItems = [historyItem, searchItem , qrCodeItem]
}
扩充遍历构造函数(推荐做法)
- 遍历构造函数特点
- 构造函数前以
convenience
开头 - 必须明确调用设计构造函数:例如self.init()
- 构造函数前以
- 构造函数写法:
extension UIBarButtonItem {
convenience init(imageName : String, highImageName : String = "", size : CGSize = CGSizeZero, target : AnyObject? = nil, action : Selector = nil) {
let btn = UIButton(type: .Custom)
btn.setImage(UIImage(named: imageName), forState: .Normal)
if highImageName != "" {
btn.setImage(UIImage(named: highImageName), forState: .Highlighted)
}
if size == CGSizeZero {
btn.sizeToFit()
} else {
btn.frame = CGRect(origin: CGPointZero, size: size)
}
btn.addTarget(target, action: action, forControlEvents: .TouchUpInside)
self.init(customView: btn)
}
}
- 使用方式:
// MARK: 设置导航栏
private func setupNavigationBar() {
setupNavigationLeftBar()
setupNavigationRightBar()
}
private func setupNavigationLeftBar() {
navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "logo", target: self, action: #selector(self.leftItemClick))
}
private func setupNavigationRightBar() {
let size = CGSize(width: 40, height: 44)
let historyItem = UIBarButtonItem(imageName: "image_my_history", highImageName: "image_my_history_click", size: size, target: self, action: #selector(self.historyItemClick))
let searchItem = UIBarButtonItem(imageName: "btn_search", highImageName: "btn_search_click", size: size, target: self, action: #selector(self.searchItemClick))
let qrCodeItem = UIBarButtonItem(imageName: "image_scan", highImageName: "image_scan_click", size: size, target: self, action: #selector(self.qrCodeItemClick))
navigationItem.rightBarButtonItems = [historyItem, searchItem , qrCodeItem]
}
小码哥-玩转【斗鱼直播APP】系列之首页导航栏设置相关推荐
- 玩转【斗鱼直播APP】系列之首页导航栏设置
首页导航栏设置 重点掌握内容 导航栏添加Items 给系统的类扩充方法 扩充便利构造函数 效果展示 在iOS开发中,导航栏的设置是必不可少的一部分. 通常导航栏中会放很多的UIBarButtonIte ...
- 小码哥-玩转【斗鱼直播APP】系列之项目部署
项目部署目的 任何一个项目最好使用源代码管理工具 源代码管理工具可以帮助我们解决备份.版本回退等等问题 因为是非基础篇,因此具体好处不在累述 常见的源代码管理工具: SVN: 集中式源代码管理工具 G ...
- 小码哥-玩转【斗鱼直播APP】系列之获取APP图片资源
重要提醒 原作者的代码有少许问题, 可能会崩溃 我已经在我fork的代码中修复了问题. 请大家去我的Github上下载该工具. 如果对你有帮助, 可以star一下哈. Github地址: coderw ...
- 小码哥-玩转【斗鱼直播APP】系列之利用青花瓷抓取数据
利用青花瓷抓取数据 青花瓷是什么? 当然这里可不是周董的歌曲, 而是我们用于抓取接口的工具. 安装一下这个软件 百度搜索该工具会找到很多绿色版(破解版的文艺说法). 安装即可, 不再累述. 手机端配置 ...
- 小码哥-玩转【斗鱼直播APP】系列之实现无限轮播
实现无限轮播 生活杂谈 最近很多童鞋私信我,Swift项目有些语法跟不上.希望我出OC版的(OC版我会在后续推出),但是以我的考虑来说,Swift在语言排行版上面其实已经超过OC,另外国内现在新项目一 ...
- 小码哥-玩转【斗鱼直播APP】系列之框架搭建
搭建效果展示 框架搭建分析 首先最底部是一个UITabbar,因此我们可以用一个UITabBarController作为启动控制器 分别添加子控制器HomeVc.LiveVc.FollowVc.Pro ...
- 小码哥-玩转【斗鱼直播APP】系列之首页布局分析实现
本帖最后由 王红元老师 于 2016-9-14 21:25 编辑 布局首页分析实现 完成最终效果 这个效果还是挺常见的哈 效果分析: 顶部是一个工具类,并且为了该工具类可以复用.(其他界面也用到)最好 ...
- 小码哥-玩转【斗鱼直播APP】系列之布局推荐界面
布局推荐界面 实现效果 今天内容完成效果 推荐界面分析 上层有无限轮播器(之后再完成) 滚动的UIScrollView或者UICollectionView(之后再完成) 下面是UICollection ...
- 小码哥-玩转【斗鱼直播APP】系列之项目基本设置
设置的内容 任何一个项目在新建之后都有很多东西需要进行设置. 比如版本号.BundleID.部署版本等等 设置BundleID.部署版本.横竖屏等 设置图标.启动图片 设置项目名称 Info.plis ...
最新文章
- mSystem:西农韦革宏组细菌-真菌互作影响微生物多样性-土壤养分循环关系
- 基于springboot实现疫情管理系统
- go语言之行--基础部分
- apollo芯片_ADAS/AD主控芯片研究:集成趋势下的短板与变革
- 遭遇内存无法读写的错误
- volatile关键字——保证并发编程中的可见性、有序性
- Android vlc 分析视频,VLC-Android 对视频流(RTSP)做翻转、旋转
- SpringCloud工作笔记050---关于同一账号多人同时登录的token重复问题
- 不缺流量却变现乏力?穿山甲重磅打造《App 如何变现创收》系列课程帮你找症结...
- IoT:MQTT协议详解
- 东芝如何看待蓝牙在物联网热潮下的机遇
- Java5的倍数_关于java:将数字四舍五入到最接近的5的倍数
- sem竞价账户怎么提升效果提高转化
- 大家都在努力,你凭什么不努力?
- 表格分组标签:表格行分组中的隐藏功能
- win10安装虚拟机Linux Centos7系统网络配置
- Java基础之IO流(三)
- 网络中常说的“丢包”是什么?—Vecloud微云
- 2020.6月做题记录
- 电销机器人来了,企业的业绩上来了吗?
热门文章
- 一文读懂UWB超宽带技术
- 饼图、柱形图、堆积柱、折线图、散点图,到底应该怎么选?
- 解压.tar.gz文件
- 苹果 iPhone 4 手机拆机组图,看看 iPhone 4 的内部构造与零件(二)_打杂的_新浪博客...
- Java Tomcat 以及Eclipse显示三只小猫咪图标
- 三年级计算机帮助我们学本领,三年级学本领作文
- 硅谷的由来—(计算机基础课七)
- Java 之Spring面试题
- 理解ES的refresh、flush、merge
- centos7 设置阿里云yum源、docker源和docker镜像加速