博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 自定义 NavigationController
阅读量:6917 次
发布时间:2019-06-27

本文共 2836 字,大约阅读时间需要 9 分钟。

hot3.png

在实际项目中,经常需要自定义导航栏实现手势返回,当然还有很多其他的功能,自行参考就好,废话不多说,直接上代码

 创建一对继承于UINavigationController 的文件

.m 中这么写

#import "BaseNVC.h"@interface BaseNVC ()
@property(nullable, nonatomic, readonly) UIGestureRecognizer *interactivePopGesture;@end@implementation BaseNVC- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.interactivePopGesture.enabled = NO; // self.navigationController.interactivePopGestureRecognizer.delegate = (id)self; }// 统一设置 bar 的字体大小和颜色+(void)initialize{ UINavigationBar *navTheme = [UINavigationBar appearance]; [navTheme setTitleTextAttributes:@{NSFontAttributeName:FONT_RATIO(17.f), NSForegroundColorAttributeName:[UIColor whiteColor]}]; [navTheme setBarTintColor:NAVIGATION_COLOR]; [navTheme setTintColor:NAVIGATION_COLOR]; }- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; __weak id weakSelf = self; self.interactivePopGestureRecognizer.delegate = weakSelf; }- (void)viewDidDisappear:(BOOL)animated{ [super viewDidDisappear:animated]; self.interactivePopGestureRecognizer.delegate = nil; }/** * 能拦截所有push进来的子控制器 */- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{ if (self.viewControllers.count > 0) { // 如果现在push的不是栈底控制器(最先push进来的那个控制器) viewController.hidesBottomBarWhenPushed = YES; viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"Nav_back_ic"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:@selector(back)]; } [super pushViewController:viewController animated:YES];}- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { BOOL isBack = YES; // 默认为支持右滑反回 if ([self.topViewController isKindOfClass:[BaseNVC class]]) { if ([self.topViewController respondsToSelector:@selector(gestureRecognizerShouldBegin)]) { BaseNVC *vc = (BaseNVC *)self.topViewController; isBack = [vc gestureRecognizerShouldBegin:self.interactivePopGesture]; } } return isBack;}- (void)back{ [self popViewControllerAnimated:YES];}- (UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent;}- (void)gestureRecognizerShouldBegin{ [self popViewControllerAnimated:YES];}#pragma mark ---- 加入这行代码 (防止手势返回再进入卡顿现象)---- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ return self.childViewControllers.count > 1; }- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}

希望对你有帮助!!!

转载于:https://my.oschina.net/alanTang123/blog/824814

你可能感兴趣的文章
Dubbo学习笔记
查看>>
基于 Redis驱动的 Laravel 事件广播
查看>>
图书管理系统【用户、购买、订单模块、添加权限】
查看>>
JavaScript30秒, 从入门到放弃之Array(六)
查看>>
RabbitMQ的安装和使用
查看>>
WebAssembly起步
查看>>
基于CentOS搭建Hexo博客--设置NexT主题及个性化定制
查看>>
百度移动端首页秒开学习
查看>>
【304天】每日项目总结系列042(2017.12.06)
查看>>
数人云|给还在犹豫选择的你,微服务架构与整体架构的各自优势
查看>>
ES6之数值的扩展
查看>>
JavaScript Event loop 事件循环
查看>>
Java究极打基础之ArrayList篇
查看>>
Java窗口(JFrame)从零开始(4)——流布局+边界布局+网格布局
查看>>
MySQL忘记密码后重置密码(Mac )
查看>>
谈谈基于机器学习的编程到底比传统编程强在哪里?
查看>>
Python中的集合类模块collections详解
查看>>
Chef在InSpec 2.0增强了云安全的自动化功能
查看>>
全能App研发助手!滴滴开源DoraemonKit
查看>>
NoSQL 数据库敏捷数据模型
查看>>