当我添加leftBarButtonItem时,后退手势无效

8

这里有一个ViewControllerA推出了一个ViewControllerB,在ViewControllerB中,leftBarButtonItem设置如下:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backBtnClicked:)];

在设置了leftBarButtonItem后,返回手势无法使用。是否有可能保留此手势?

2个回答

25

因为您改变了左侧的按钮项,所以您告诉导航控制器停止管理用户可以执行的基于导航的后退操作。

要解决这个问题,您可以使用以下方法告诉导航控制器继续在当前视图控制器上接受这些手势:

self.navigationController.interactivePopGestureRecognizer.delegate = self;

在这里,“self”指的是您的视图控制器。

UIViewController私下实现了UIGestureRecognizerDelegate,因此您会收到一个警告,但是您可以通过将协议符合性(<UIGestureRecognizerDelegate>)添加到您的头文件或类扩展中来减轻这种情况。


我听说这个有问题,但乍一看似乎可以工作。有人使用过这个时遇到奇怪的问题吗? - skinsfan00atg
3
我发现一个可能存在问题的参考资料:具体问题在于,如果您尝试在另一个弹出动画正在进行时滑动屏幕,将会导致异常情况,您不能同时执行多个转换。建议的解决方案是制作自定义UINavigationController,其中导航控制器本身是interactionPopGestureRecognizer委托,当其他导航转换正在进行时,它将忽略滑动操作。我更喜欢使用UINavigationBar setBackIndicatorImage来设置返回按钮的自定义图片。 - Matthew Horst

0
尝试将interactivePopGestureRecognizer设置为nil。
override func viewDidLoad() {
    super.viewDidLoad()
    self.interactivePopGestureRecognizer!.delegate = nil;

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接