我在我正在使用的应用程序的大量位置使用自定义后退按钮,所以我在UINavigationController上有一个类别,它添加了一个pushViewControllerWithBackArrow
方法,可以在视图控制器上设置自定义后退箭头,然后推它。但是,我似乎无法使interactivePopGestureRecognizer
正常工作。我在堆栈溢出和在线上找到的代码都是子类UINavigationController,或者在推送的视图控制器中设置interactivePopGestureRecognizer
。
一个解决方案(http://keighl.com/post/ios7-interactive-pop-gesture-custom-back-button/)涉及将此代码添加到UINavigationController子类中的viewDidLoad:
__weak UINavigationController *weakSelf = self;
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)])
{
self.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)weakSelf;
}
这是半功能的,但如果我在我的根视图控制器中向后滑动它会锁定UI。这个问题的解决方案涉及子类化UINavigationController并重写pushViewController和didShowViewController,我想避免。
有没有办法让手势识别器在UINavigationController
类别上工作?
答案 0 :(得分:0)
最好的解决方案是为UIViewController创建一个类别,以便您可以在整个项目中使用它,如下所示。您也可以只复制方法customizeBackButton的代码并将其放在您需要的任何视图控制器中
//UIViewController+Back.h
#import <UIKit/UIKit.h>
@interface UIViewController (Back)
- (void)customizeBackButton;
@end
实施此方法
//UIViewController+Back.m
#import "UIViewController+Back.h"
@implementation UIViewController (BackButton)
- (void)customizeBackButton
{
UIImage *backButtonImage = [UIImage imageNamed:@"back.png"];
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStylePlain target:self.navigationController action:@selector(popViewControllerAnimated:)];
self.navigationItem.hidesBackButton = YES;
[self.navigationItem setLeftBarButtonItem: customItem];
}
@end
请注意,您必须使用self.navigation.hidesBackButton隐藏原始后退按钮,否则它们都会显示出来。 然后,在任何需要的地方使用它!
-(void) viewWillAppear:(BOOL)animated {
[self customizeBackButton];
}