关于使用navigationController,前后2个视图控制器navigationBar隐藏属性不同,导致右滑手势失效问题的解决办法

###1.问题描述:如A是navigationController的rootViewController,在这个页面navigationBar是显示的(隐藏属性为NO),它push圧栈过来B视图控制器,B页面navigationBar是不显示的(隐藏属性为YES),有一定几率会出现,B要右滑pop自己要圧栈A时,右滑手势会失效,即使B中设置 self.navigationController.interactivePopGestureRecognizer.enabled = YES也不起作用
###2.问题分析:其实是右滑手势被阻断导致,手势仍然存在,需要重写其代理方法,使手势不被阻断
###3.解决步骤:
####1.在B页面写下此行代码:self.navigationController.interactivePopGestureRecognizer.delegate = self;

####2.让B页面遵守UIGestureRecognizerDelegate协议

####3.重写GestureRecognizerDelegate方法:
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
  if (self.navigationController.viewControllers.count <= 1) {
    return NO;//防止B页面不存在,只有一个页面,此时也用不到右滑手势
  }
    return YES;
}

时间: 2024-11-06 12:10:34

关于使用navigationController,前后2个视图控制器navigationBar隐藏属性不同,导致右滑手势失效问题的解决办法的相关文章

iOS7 NavigationController 右滑手势问题

苹果一直都在人机交互中尽力做到极致,在iOS7中,新增加了一个小小的功能,也就是这个api:self.navigationController.interactivePopGestureRecognizer.enabled = YES; 这个api功能就是在NavigationController堆栈内的UIViewController可以支持右滑手势,也就是不用点击右上角的返回 按钮,轻轻在屏幕左边一滑,屏幕就会返回,随着ios设备屏幕的增大,这个小功能让手指短,拇指大和手残人士看到了福音.

多视图控制器编写

#import "AppDelegate.h" #import "FisrtViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.wind

iOS开发 MMDrawerController左右抽屉打开手势与中心视图子视图控制器手势冲突问题的解决方案

MMDrawerController是一个很好用的解决抽屉效果的第三方类,但有时候当我们在中心视图控制器中需要使用手势进行其他操作的时候会产生手势冲突,导致运行效果不符合我们的想象.那么问题来了,该怎么解决冲突问题呢? 下面是我在使用过程中的个人总结: 我的需求: 1.有一个左抽屉和中心视图控制器,从中心视图控制器右滑可以打开左抽屉. 2.中心视图控制器中的TableViewCell可通过滑动手势删除 问题所在: 1.由于删除cell的左滑手势和MMDrawerController的打开右抽屉的

截获导航控制器系统返回按钮的点击pop及右滑pop事件

前几天看了@栾小布的一篇文章:Custom backBarButtonItem,在跟着做的时候我又顺便扩展了一些,写此文章的目的是为了总结一下自己所写的东西,方便以后翻看容易,同时也是自己入行iOS一年时间,希望写点东西练练手,还有希望可以分享给大家,希望大家一同讨论,提出宝贵意见以及更简单的实现.总体效果如下: 同时受@J_雨的轻松学习之——IOS利用Runtime自定义控制器POP手势动画一文影响,所以我们将用两种方法实现. 实现思路 每一个navigationController都自带有一

iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法

一.最普通的视图控制器UIViewContoller 一个普通的视图控制器一般只有模态跳转的功能(ipad我不了解除外,这里只说iPhone),这个方法是所有视图控制器对象都可以用的,而实现这种功能,有两种方法. 1.通过方法 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion跳转 相

UI 07 _ 导航视图控制器 与 属性传值

首先, 先创建三个VC. 完成点击按钮, 进入下一页, 并能够返回. 要先把导航视图控制器创建出来. 在AppDelegate.m 文件中代码如下: #import "AppDelegate.h" #import "MainViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (void)dealloc{ [_window release]; [super dea

iOS 7:用代码解决视图控制器的View整体上移问题

如果你准备将你的老的 iOS 6 app 迁移到 iOS 7 上,那么你必须注意了.当你的老的 app 在 iOS 7 设备上运行时,所有ViewController 的视图都整体上移了,因为 iOS 7 把整个屏幕高度(包括状态栏和导航栏)都作为了视图控制器的有效高度.于是你的视图上移了,并和上层的状态栏交叠在一起. 你当然可以在 Xcode 中修改每个 View,将他们下移20个像素(状态栏高度)或者64个像素(状态栏+导航栏高度). 但是苹果显然已经考虑到这个问题,他们在 iOS 7 SD

[BS-20] 导航控制器和视图控制器在添加控制器的区别

导航控制器和视图控制器在添加控制器的区别 1. 因导航控制器拥有导航栈,有一个普通视图控制器都没有的数组viewControllers,加入该数组中的视图控制器默认以push的方式进入导航栈.导航控制器有个[UINavigationController alloc] initWithRootViewController:rootVC]; 的初始化方法,调用该方法相当于把rootVC加入数组viewControllers的第一个位置,作为栈底部的rootVC是不会被pop出去的,与导航控制器共生死

表视图控制器(TableViewController)(三) 、 表视图搜索

1 乐库的设置界面 1.1 问题 tableView分为静态(static)和动态(dynamic),之前使用的都是动态的tableView,表视图的有多少分区.有多少行以及每一行显示的内容都不是固定的,都由数据模式来决定.而静态的tableView有多少分区.有多少行以及每一行显示的内容都是固定不变的. 静态tableView应用广泛,常用于各种应用软件的设置界面,本案例使用静态tableView完成乐库的设置界面,如图-1所示: 图-1 1.2 方案 由图-1可以看到该界面的显示内容是固定不