iOS中的滑动后退手势是否有回调功能?

时间:2015-08-14 08:35:01

标签: ios objective-c uinavigationcontroller

有时当用户回到之前的UIViewController时,我想做点什么。

如果用户点击了UINavigationBar中的后退按钮,我就可以捕获该事件。

但如果他们使用滑动后退手势返回,我无法回应此更改。

刷卡后退手势有回调吗?

目前我只能通过

在我的应用中禁用此类页面
interactivePopGestureRecognizer.enabled = NO;

2 个答案:

答案 0 :(得分:1)

试试这个。它为你提供了更好的解决方案。

- (void)viewDidLoad {
    [super viewDidLoad];
    UIScreenEdgePanGestureRecognizer *gesture = (UIScreenEdgePanGestureRecognizer*)[self.navigationController.view.gestureRecognizers objectAtIndex:0];
        [gesture addTarget:self action:@selector(moved:)];
}

在Target方法中。

-(void)moved:(id)sender{    
    // do what you want

//finally remove the target
    [[self.navigationController.view.gestureRecognizers objectAtIndex:0] removeTarget:self action:@selector(moved:)];
}

答案 1 :(得分:0)

最简单的方法是通过执行以下操作来钩住UINavigationController中已经内置的代码:

override func viewDidLoad() {
  super.viewDidLoad()
  navigationController?.interactivePopGestureRecognizer?.addTarget(self, action: #selector(GeocacheDetailsViewController.handleBackswipe))
}

@objc private func handleBackswipe() {
   navigationController?.interactivePopGestureRecognizer?.removeTarget(self, action: #selector(GeocacheDetailsViewController.handleBackswipe))
   GSAnalyticsManager.sharedInstance.tagSwipedToGoBackInNavStack(screenName: analyticsNameOrTypeName)
}

记住要在选择器中调用removeTarget(_:action:),否则它将向选择器发送垃圾邮件,直到手势结束。