有时当用户回到之前的UIViewController
时,我想做点什么。
如果用户点击了UINavigationBar
中的后退按钮,我就可以捕获该事件。
但如果他们使用滑动后退手势返回,我无法回应此更改。
刷卡后退手势有回调吗?
目前我只能通过
在我的应用中禁用此类页面interactivePopGestureRecognizer.enabled = NO;
答案 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:)
,否则它将向选择器发送垃圾邮件,直到手势结束。