#import <objc/runtime.h>

@interface UINavigationController (Transition)<UIGestureRecognizerDelegate>

- (void)transitionPanGestureDidLoad;

@end

@interface DLNavigationTransition ()

@end

@implementation DLNavigationTransition

/**

*  启动右滑pop

*/

+ (void)enableNavigationTransitionWithPanGestureBack

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

Method viewDidLoadMethod = class_getInstanceMethod([UINavigationController class], @selector(viewDidLoad));

Method transitionPanGestureDidLoadMethod = class_getInstanceMethod([UINavigationController class], @selector(transitionPanGestureDidLoad));

method_exchangeImplementations(viewDidLoadMethod, transitionPanGestureDidLoadMethod);

});

}

@end

@implementation UINavigationController (Transition)

- (void)transitionPanGestureDidLoad

{

if ([self isKindOfClass:[UINavigationController class]])

{

[self transitionPanGestureDidLoad];

//1.获取系统interactivePopGestureRecognizer对象的target对象

id target = self.interactivePopGestureRecognizer.delegate;

//2.创建滑动手势,taregt设置interactivePopGestureRecognizer的target,所以当界面滑动的时候就会自动调用target的action方法。

//handleNavigationTransition是私有类_UINavigationInteractiveTransition的方法,系统主要在这个方法里面实现动画的。

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] init];

[pan addTarget:target action:NSSelectorFromString(@"handleNavigationTransition:")];

//3.设置代理

pan.delegate = self;

//4.添加到导航控制器的视图上

[self.view addGestureRecognizer:pan];

//5.禁用系统的滑动手势

self.interactivePopGestureRecognizer.enabled = NO;

}

}

#pragma mark - 滑动开始会触发

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

{

UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)gestureRecognizer;

CGPoint translat = [pan translationInView:pan.view];

if (translat.x < 0 ) {

return NO;

}

//只有导航的根控制器不需要右滑的返回的功能。

if (self.viewControllers.count <= 1)

{

return NO;

}

return YES;

}

@end

//直接上代码  等你来拷贝

iOS 开发 右滑返回上一级控制器的更多相关文章

  1. iOS系统右滑返回全局控制方案

    前言 今天有个小需求,在点击导航条上的返回按钮之前要调用某个API,并弹出UIAlertView来显示,根据用户的选项判断是否是返回还是继续留在当前控制器.举个简单的例子,当点击导航条上的左上角返回按 ...

  2. iOS页面右滑返回的实现方法总结

    1.边缘触发的系统方法 ①系统返回按钮 self.navigationController.interactivePopGestureRecognizer.enabled = YES;  ②自定义返回 ...

  3. ios滑动手势全屏(这段代码实现了下一级控制器滑到上一级控制器)

    在自定义导航控制器里面加以下代码就增加全屏滑动手势 >推向前一个控制器 //  HBNavigationController.m // #import "HBNavigationCon ...

  4. flutter 右滑返回上一页

    import 'package:flutter/material.dart'; import 'package:flutter_app/pages/SplashScreen.dart'; import ...

  5. 类似IOS的滑动返回上一级,SwipeBackLayout-android的滑动返回类库

    最近,公司在开发App的需求中增加了一个新的需求,要在android的页面中增加向右滑动的时候返回上一级页面.我刚知道这个需求的时候,感觉有点坑,可能设计那边最近接触到知乎的客户端或者是IOS的滑动可 ...

  6. iOS开发之自定义导航栏返回按钮右滑返回手势失效的解决

    我相信针对每一个iOS开发者来说~除了根视图控制器外~所有的界面通过导航栏push过去的界面都是可以通过右滑来返回上一个界面~其实~在很多应用和APP中~用户已经习惯了这个功能~然而~作为开发者的我们 ...

  7. App开发流程之右滑返回手势功能续

    上一篇记录了利用系统私有变量和方法实现右滑返回手势功能:http://www.cnblogs.com/ALongWay/p/5893515.html 这篇继续记录另一种方案:利用UINavigatio ...

  8. App开发流程之右滑返回手势功能

    iOS7以后,导航控制器,自带了从屏幕左边缘右滑返回的手势功能. 但是,如果自定义了导航栏返回按钮,这项功能就失效了,需要自行实现.又如果需要修改手势触发范围,还是需要自行实现. 广泛应用的一种实现方 ...

  9. navagationController 的子控制器如何取消右滑返回

    1.首先在navagationController的某个控制器中 遵守:UIGestureRecognizerDelegate 2.在viewDidload中设置: self.navigationCo ...

随机推荐

  1. 利用jquery.chained.remote实现多级级联

    多级级联一直是前端比较烦人的一个功能,本次用jquery的插件,chained.remote实现多级级联. 应用场景:至少有二个下拉框,下拉框的个数不定. 应用步骤: 1.引入js文件,当然这个插件需 ...

  2. Python爬虫(二十二)_selenium案例:模拟登陆豆瓣

    本篇博客主要用于介绍如何使用selenium+phantomJS模拟登陆豆瓣,没有考虑验证码的问题,更多内容,请参考:Python学习指南 #-*- coding:utf-8 -*- from sel ...

  3. Python:list 和 array的对比以及转换时的注意事项

    Python:list 和 array的对比以及转换时的注意事项 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-6-4 ...

  4. 基于apache httpclient 调用Face++ API

    简要: 本文简要介绍使用Apache HttpClient工具调用旷世科技的Face API. 前期准备: 依赖包maven地址: <!-- https://mvnrepository.com/ ...

  5. 52、css属性操作

    前面说的主要是css的使用规则和选择器等,这篇主要讲解css的具体使用. 一.css text 1.文本颜色:color 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 1)十六进制值 ...

  6. Parcel:常见技术栈的集成方式

    前言 Parcel 是什么 Parcel 是一个前端构建工具,Parcel 官网 将它定义为极速零配置的Web应用打包工具.没错,又是一个构建工具,你一定会想,为什么前端的构建工具层出不穷,搞那么多工 ...

  7. Linux简介,虚拟机安装,网络设置,桌面和vim安装

    Linux简介: linux代表系统内核.Linux系统指基于Linux内核的操作系统,由内核和程序结合组成.比较流行的发行版本由RedHat Linux.Fedora.Centos.Debian.U ...

  8. 解决IOS iframe不滚动问题

    .frameBox{ position: fixed; top: 0; left: 0; right: 0; bottom: 0; -webkit-overflow-scrolling: touch; ...

  9. SQL基本查询_子查询(实验四)

    SQL基本查询_子查询(实验四) 1.查询所有员工中薪水低于"孙军"的员工姓名和薪水: 2.查询与部门编号为"01"的岗位相同的员工姓名.岗位.薪水及部门号: ...

  10. Jenkins 关闭和重启实现方式.

    1.关闭Jenkins 只需要在访问jenkins服务器的网址url地址后加上exit.例如我jenkins的地址http://localhost:8080/,那么我只需要在浏览器地址栏上敲下http ...