前两天开发公司的项目,突然发现项目没有侧滑返回的功能。今天研究了一下。在网上找了资料,原来ios7之后系统自带的有这个功能。把self.interactivePopGestureRecognizer.enabled设置成YES就可以了。其实系统默认也是YES。那我们的app为什么侧滑这个操作就没有呢。查了一下原因:原来我们的app自定义了返回按钮。所以侧滑返回按钮失效了。先看一下我们自定义的代码
图一
图一中的代码我现在写在一个继承UIViewController的BaseViewController中,项目里面所有的页面都继承BaseViewController
最后找到了两种方法解决这个问题。
- 第一种:把失效的侧滑返回加上,方法是:创建一个BaseNavigationViewController类继承UINavigationController在BaseNavigationViewController的viewDidLoad中加上
self.interactivePopGestureRecognizer.delegate = self;
然后实现协议方法代码如下
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if (self.viewControllers.count <= 1 ) {
return NO;
}
return YES;
}
这样侧滑返回的手势就回来了。
- 第二种:把图一自定义按钮中的leftBarButtonItem改成backBarButtonItem 即
self.navigationItem.leftBarButtonItem=barItem;
改成
self.navigationItem.backBarButtonItem = barItem;
这个时候有个问题就是backBarButtonItem的title是会显示出来的如下图
图二
如果想去掉这个title也有两种方法
- 1、把上面图一的代码删除在BaseViewController中添加如下代码
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:self.navigationItem.backBarButtonItem.style target:nil action:nil];
这样就把title去掉了效果如下
图三
但是仔细看一下图二和图三的返回按钮这个箭头是不一样的。(图二箭头细一些图三中的箭头粗一些)原来图二中返回的箭头是我用自定义图片而图三中的返回箭头是系统的图片。那这第二种方法我可以自定义吗?答案当然是肯定的。
如果自定义图片我们只需要在BaseNavigationViewController类中加上
[self.navigationBar setBackIndicatorImage:[UIImage imageNamed:@"nav_back"]];
[self.navigationBar setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"nav_back"]];
其中@"nav_back"是我自定义图片的名字。
然后运行代码,效果如图
图四
大功告成!
网友评论