NavigationBar是很常用的一个元素,所以常常需要进行自定义操作,而一种比较直观的方式就是,先定义一个类NavigationBar继承自UINavigationBar,而这个NavigationBar的内部内容则是比较复杂的了,里面添加我们需要的所有的navigationBar 的样式,而且使得这些view的尺寸都是整个NavigationBar的尺寸,然后再进行内部view的构建就可以了,而需要进行切换的时候就进行这些view之间的显示和隐藏的切换就可以了,最好使用一些动画,前面的文中有提供动画流畅的保证方式,现在新建一个HomeNavigationController 继承自UINavigationController,并且在这个类的实现中这样操作

@implementation HomeNavigationController
-(instancetype)init
{self = [super initWithNavigationBarClass:[Navigationbar class] toolbarClass:nil];if (self) {self.delegate = self;}return self;
}

这样的话就将HomeNavigationController的导航栏的样式进行了确定了。而为了能进行子控制器的导航栏的正确显示,最好在HomeNavigationController中声明一个

@protocol SecretPresentableViewController <NSObject>@optional
- (void)willPresentWithNavigationBar:(Navigationbar *)navigationBar;
@end

而那些想要拥有这个导航栏的自控制器只需要实现协议就可以了,而NavigationBar中的多个view的左右按钮以及中间都可以完全的自定义了,而事件 的传递则使用block的方式,这里提供其中一个自定义view的h定义方式

@interface HomeNavigationView : UIView
@property(nonatomic, copy) void (^didTapComposeBlock)(void);
@property(nonatomic, copy) void (^didTapNotificationsBlock)(void);
@property(nonatomic, copy) void (^didTapChatBlock)(void);
@property(nonatomic, copy) void (^didTapScrollToTopBlock)(void);
@property(nonatomic, copy) void (^didTapNewThemeTopBlock)(void);@property (nonatomic, strong) UILabel* titleLabel;
@property (nonatomic, strong) UIButton *tipsNewThemeBtn;
@property (nonatomic, strong) UIButton *unreadLeftV;
@end

而在m文件中只要对按钮添加监听就可以了,例子是

#pragma private
-(void)left:(id)sender
{if (_didTapNotificationsBlock) _didTapNotificationsBlock();}

在拥有navigationBar 的控制器中对具体的block进行处理

navigationBar.homeNavigationView.didTapNotificationsBlock = ^{[self left:nil];};

而里面使用的这个left:方法则正是这个控制器中的具体的处理方法(push,modal,或者按钮的消失,lable的隐藏等等的点击相应等等),这样的话就实现了自定义bar的同时而且实现了bar和控制器之间的无缝衔接。更加方便的进行自定义的操作,但同时也可以完全实现系统提供bar的所有功能等等,而这个具体的实现过程很有可能就是apple自己内部的实现方式,因为apple很推荐我们使用block而这种bar和viewcontrol的传递消息的方式感觉这是最优秀的了。

转载于:https://www.cnblogs.com/azxfire/p/4095487.html

如何完全自定义NavigationBar相关推荐

  1. 自定义Navigationbar,使用Catagory

    自定义Navigationbar,使用Catagory 方法一: // UINavBar.h #import @interface UINavigationBar (UINavigationBarCa ...

  2. 自定义navigationBar字体大小颜色背景色

    自定义navigationBar的title内容和字体大小.颜色 self.title = @"登 录"; self.navigationController.navigation ...

  3. 微信小程序自定义navigationBar

    navigationBar是什么? 微信小程序一般来说有两个bar,一个导航栏,一个tabbar(小程序下方一排切换按钮),实现下方自定义tabbar的方法一般来说较为简单,现在着重叙述上方自定义导航 ...

  4. 微信小程序自定义navigationBar、自定义标题栏

    最近在做小程序项目,需要用到自定义navigationBar,之前用过colorUI等组件库的navigationBar组件,但是现在想自己写一个,所以有了今天的小记 在做navigationBar之 ...

  5. 小程序自定义navigationBar组件以及上滑修改navigationBar

    前言 navigationBar相信大家都不陌生把?今天我们就来说说自定义navigationBar,把它改变成我们想要的样子. 这次做一个全自定义的nav-bar,适用于基本上所有的场景,简单易懂, ...

  6. 自定义NavigationBar的思路

    http://www.devdiv.com/uinavigationbar_-blog-21666-9081.html 话说自古武林剑法门派繁多,所以就有了每年9月9日的华山论剑... iOS开发某些 ...

  7. 【微信小程序】自定义navigationBar标题栏

    小程序默认使用的navigationBar只能设置颜色.文字,左侧返回按钮也是不可改变的,若要实现下方效果有解决方案,但是也有一定的问题. 1.更改app.json(2019.9.10更新) &quo ...

  8. 微信小程序自定义navigation-bar导航栏(自适应安卓苹果)

    最近在写商城,中途遇到了需要自定义修改导航栏的操作,大概是如下图接过样子的,于是想手写一份,但我发现右上角的分享按钮在不同设备离顶部的距离是不一样的,于是找了下官方划水员写的文档(点这里查看),(⊙o ...

  9. 自定义navigationBar

    1)改变返回按钮 // 需要在父视图设置backBarButtonItemUIBarButtonItem *backBtnItem = [[UIBarButtonItem alloc] init];b ...

最新文章

  1. Android实现顶层全局窗口,不依赖于Activity的Android全局悬浮窗的实现
  2. Windows Server 2003 导入Java生成的证书,保证iis对CAS的访问
  3. python 读取当前文件夹下所有后缀为.lib文件
  4. 二叉树三种遍历方式的非递归实现
  5. 蜂窝注册表和永久存储
  6. 无法删除文件提示找不到指定文件导致文件无法删除的解决方法
  7. Java中线程的实现方式
  8. python学习--关注容易被忽略的知识点--(五)面向对象编程
  9. 改变mysql默认字符集为utf8
  10. C语言求1000后面有多少个0,c语言题目计算1000!的末尾有多少个零
  11. java log4j 动态配置_动态更改log4j日志级别
  12. Microchip PIC系列8位单片机入门教程(七)PWM
  13. 华为linux用什么浏览器,Linux系统浏览器最受用户欢迎前十排名
  14. hibernate笔记(三)
  15. Win10 网络连接处空白什么都没有,电脑无法上网
  16. MySQL----多表查询
  17. word-breakbreak-all和word-wrapbreak-word的区别
  18. 一个新技术与传统产业开始越来越深入融合的发展新趋势
  19. pandas practice
  20. 分享一个实现夜间模式的浏览器扩展

热门文章

  1. 现在好用的mysql客户端_还在用 Navicat 的,可以试试这几款免费且好用的 MySQL 客户端...
  2. 做AI项目,找有三AI,200+研发人员为你服务
  3. 【百家稷学】深度学习与嵌入式平台AI实践(北京交通大学实训)
  4. 【杂谈】怎么使用有三AI完成系统性学习并赚钱
  5. 全球及中国皮革和纺织品用甲酸行业竞争调查分析及投资规划报告2021年版
  6. 第四届泉水文化论坛协调会-商协社团:平台经济谋定水产业
  7. maven打war包
  8. JSON Pointer
  9. Java垃圾回收总结
  10. Codevs 3002 石子归并 3(DP四边形不等式优化)