封装UIBarButtonItem

简介: 封装UIBarButtonItem

封装UIBarButtonItem


在我们开发项目时候,经常会遇到导航栏左右两边存在按钮,或者不存在按钮

今天给大家封装一下这个功能:截图给大家看,同时提供代码

第一步

6dff181755ed911cd9458399e568da16.png

Snip20160801_4.png

第二步

cc21b13af2adf311eea6a9c7ebb42f4e.png

Snip20160801_5.png

第三步:在.m文件里面封装

fc40989a1036603a54cb01f48c43463a.png

Snip20160801_7.png

/**
 *  创建一个item
 *  
 *  @param target    点击item后调用哪个对象的方法
 *  @param action    点击item后调用target的哪个方法
 *  @param image     图片
 *  @param highImage 高亮的图片
 *
 *  @return 创建完的item
 */
+ (UIBarButtonItem *)itemWithTarget:(id)target action:(SEL)action image:(NSString *)image highImage:(NSString *)highImage
{
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    // 设置图片
    [btn setBackgroundImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
    [btn setBackgroundImage:[UIImage imageNamed:highImage] forState:UIControlStateHighlighted];
    // 设置尺寸
    btn.size = btn.currentBackgroundImage.size;
    return [[UIBarButtonItem alloc] initWithCustomView:btn];
}

第四步:在.h文件提供出方法

da710f3a50363cd7330384e04d7ebb10.png

Snip20160801_6.png

+ (UIBarButtonItem *)itemWithTarget:(id)target action:(SEL)action image:(NSString *)image highImage:(NSString *)highImage;

第五步

3989a0004e55156ae36dfb211bcfb5c0.png

Snip20160801_8.png

self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithTarget:self action:@selector(sweep) image:@"navigationbar_pop" highImage:@"navigationbar_pop"];
    self.navigationItem.rightBarButtonItem = [UIBarButtonItem itemWithTarget:self action:@selector(message) image:@"navigationbar_friendsearch" highImage:@"navigationbar_friendsearch"];
注意:我这里把高亮图片和默认图片设置为了同一张图片,如果公司需求没有要求设置高亮,你就和我一样设置同一张图片就可,如果你要设置为空的话,会报一个警告,不过没有关系,我们可以给他设置一个空格@“ ”就把图片设置为@+ “ + 空格 +”就可以了

后面有个哥们给了个建议说封装一下文字,其实如果左右两边是文字的话使用系统自带的就可以了.这里我就贴一小段代码,自己看一下哈

UIBarButtonItem *item = [UIBarButtonItem appearance];
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    dict[NSForegroundColorAttributeName] = [UIColor redColor];
    [item setTitleTextAttributes:dict forState:UIControlStateNormal];  
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"哈哈" style:UIBarButtonItemStylePlain target:self action:@selector(click)];
}

Dome:https://github.com/LYWGod/UIBarButtonItemExtension

相关文章
|
10月前
|
分布式计算 数据可视化 数据挖掘
Pandas数据应用:社交媒体分析
本文介绍如何使用Pandas进行社交媒体数据分析,涵盖数据获取、预处理、探索性分析和建模的完整流程。通过API获取数据并转换为DataFrame格式,处理缺失值和数据类型转换问题。利用Matplotlib等库进行可视化,展示不同类型帖子的数量分布。针对大规模数据集提供内存优化方案,并结合TextBlob进行情感分析。最后总结常见问题及解决方案,帮助读者掌握Pandas在社交媒体数据分析中的应用。
293 96
|
消息中间件 存储 缓存
RocketMQ - 消费者启动机制
RocketMQ - 消费者启动机制
292 0
|
12月前
|
存储 JSON 安全
如何使用 JSON Web Tokens 进行身份验证?
总的来说,JWT 是一种强大而灵活的身份验证方式,通过正确使用和管理,可以为应用提供可靠的身份验证机制,同时提高系统的可扩展性和安全性。在实际应用中,需要根据具体的需求和场景,合理设计和实施 JWT 身份验证方案。
348 63
|
10月前
|
人工智能 安全 搜索推荐
《盘古大模型——鸿蒙NEXT的智慧引擎》
华为HarmonyOS NEXT发布,将AI与操作系统深度融合,开启智能新时代。其中,盘古大模型为核心,赋予小艺智能助手超强的记忆、推理和规划能力,支持23类记忆类型及万亿token知识量,实现复杂功能如图片转表格、邮件规划导航等,极大提升用户操作效率。同时,盘古大模型助力开发者快速开发智能应用,降低开发门槛,推动智能生态发展。系统还通过星盾安全架构保障数据安全与隐私,确保用户体验更智能、更安全。
997 18
|
11月前
|
人工智能 算法 芯片
《C++与 ASIC 芯片:人工智能领域的强力搭档》
在AI发展中,C++与ASIC芯片的协同应用成为关键探索方向。C++以其高性能和对底层硬件的精细控制,与ASIC芯片的高度优化计算能力相结合,共同推动AI系统在性能、能效上的突破,特别是在智能安防、自动驾驶等领域展现巨大潜力。
180 11
|
12月前
|
传感器 人工智能 搜索推荐
数字孪生在医疗健康中的作用:重塑医疗体验与提升服务质量
数字孪生技术在医疗健康领域的应用正逐步展现出巨大潜力,通过构建患者的个性化数字模型,实现精准医疗、疾病预测、手术优化、设备仿真和患者管理,显著提升了医疗服务质量与患者体验。
|
存储 运维 安全
云计算:优势与挑战
在数字化浪潮的推动下,云计算已经成为企业信息化建设的重要组成部分。本文将针对云计算的优势和劣势进行深入分析,旨在为读者提供全面的了解和参考。
1675 5
|
算法 Unix Linux
7z——拥有极高压缩比的开源压缩软件
【11月更文挑战第6天】7z 是一种开源压缩软件,具有高压缩比、开源特性、功能丰富、跨平台支持和良好兼容性等特点。它采用先进的压缩算法,支持大文件、加密和多种压缩格式,广泛应用于个人和企业文件管理。
906 3
|
Kubernetes Cloud Native 容灾
阿里云新版ACE全球通关第一人考试经历回顾
2022.3月底阿里云针对老版ACE进行了改版,针对云计算技术的发展趋势,新增了云原生等热门技术,同时新版ACE认证新增了实验和面试,全面考查考生的动手能力和理论知识结构,含金量大大提升。本人于2022.7.25号通过新版ACE实验,并于8.22号参加并通过了新版ACE第一场面试考试,有幸成为新版ACE全球通关第一人。现在本人备考学习新版ACE认证的过程记录成文,跟大家分享,期待越来越多的云计算技术爱好者学习和报考新版ACE,拿到属于自己的全球编号。
3606 19
阿里云新版ACE全球通关第一人考试经历回顾
|
运维 Kubernetes 算法
独家深度 | 那些年我做开源和自研走过的弯路和经验
本文将重点分享开源结合自研项目的一些经验。
977 1
独家深度 | 那些年我做开源和自研走过的弯路和经验