欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android NavigationController 右滑手势详解

程序员文章站 2022-06-23 14:39:04
苹果一直都在人机交互中尽力做到极致,在ios7中,新增加了一个小小的功能,也就是这个api:self.navigationcontroller.interactivepop...

苹果一直都在人机交互中尽力做到极致,在ios7中,新增加了一个小小的功能,也就是这个api:self.navigationcontroller.interactivepopgesturerecognizer.enabled = yes;

这个api功能就是在navigationcontroller堆栈内的uiviewcontroller可以支持右滑手势,也就是不用点击右上角的返回按钮,轻轻在屏幕左边一滑,屏幕就会返回,随着ios设备屏幕的增大,这个小功能让手指短,拇指大和手残人士看到了福音。

这个功能是好,但是经常我们会有需求定制返回按钮,如果手动定制了返回按钮,这个功能将会失效,也就是自定义了navigationitem的leftbarbuttonitem,那么这个手势就会失效。

解决方法找到两种

1.重新设置手势的delegate

复制代码 代码如下:

self.navigationcontroller.interactivepopgesturerecognizer.delegate = (id)self;

2.当然你也可以自己响应这个手势的事件

复制代码 代码如下:

[self.navigationcontroller.interactivepopgesturerecognizer addtarget:self action:@selector(handlegesture:)];

有更多方法以后继续补充,这里可以根据自己需要进行选择,如果只是简单定制了返回按钮,第一种最简单,一句代码搞定。

问题二:ios开发 向右滑动手势实现返回.在navigationcontroller中如何设置

在navigationcontroller中实现向右滑动 返回功能

系统提供的backbarbuttonitem,不用添加任何代码即可实现向右滑动后退功能,但是往往要对按钮修改样式等时,就需要自定义leftbarbuttonitem,此时向右滑动即失效.通过下面方法即可解决该问题.(本人亲自实验过)

主要是通过设置navigationcontroller.interactivepopgesturerecognizer 此手势的一些属性,此手势大家可以通过sdk查看说明,这里不细说

1. self.navigationcontroller.interactivepopgesturerecognizer.enabled = yes | no;      手势有效与否

2. self.navigationcontroller.interactivepopgesturerecognizer.delegate = self;               手势的代理,一般会设置为self

1中的属性,再viewcontroller中默认的设置为yes,即手势有效.按照2中的属性设置后,当前的viewcontroller即可以实现该向右滑动后退功能,但是当回到navigationcontroller的rootview中再次做出向右滑动时,程序会有问题(再次push子controller时,程序卡在当前界面无法跳转).有效解决方案如下:

说明:有两个controllera,b

navigationcontroller的rootview设置为a,在a中点击按钮后push b.在a的 -(void)viewdidappear:(bool)animated方法中加入self.navigationcontroller.interactivepopgesturerecognizer.enabled = no;代码如下:
- (void)viewdidappear:(bool)animated
{
  if ([[[uidevice currentdevice] systemversion] floatvalue] >= 7.0) {
    self.navigationcontroller.interactivepopgesturerecognizer.enabled = no;  //让rootview禁止滑动
  }
}

然后再b中的- (void)viewdidload方法中加入

- (void)viewdidload
{
  // 配置返回按钮
  uibarbuttonitem * backitem = [self barbuttonforimagenames:@[@"icon-返回", @"", @""] action:@selector(popback)];
  backitem.title = @"";
  if ([[[uidevice currentdevice] systemversion] floatvalue] >= 7.0) {
    self.navigationcontroller.interactivepopgesturerecognizer.enabled = yes;
    self.navigationcontroller.interactivepopgesturerecognizer.delegate = self;
  }
  self.navigationitem.leftbarbuttonitem = backitem;

  if ([[[uidevice currentdevice] systemversion] floatvalue]
 >= 7.0) {

    self.navigationcontroller.interactivepopgesturerecognizer.delegate = self; 
  }
}

这样即可以保证再a中向右滑动后再次pushb时不会卡在a界面.

再项目中大家一般会创建风格统一的界面,一般都会创建一个基础viewcontroller,再此viewcontroller扩展一个配置leftbarbutton的方法,在该方法中加入b的viewdidload中的代码,这样在创建leftbarbutton的同时,直接加了返回的操作(不用每个viewcontroller中都加入这样一段代码).然后只在navigationcontroller的rootview中加入a的(void)viewdidappear:(bool)animated方法即可.

以上内容是android navigationcontroller 右滑手势详解,希望大家喜欢。