大伙都是怎样处理 navigation 的 interactivePopGestureRecognizer 的?

2015-07-20 10:10:01 +08:00
 yfmir
事情起因是因为自定义了leftItem之后pop手势失效,然后重新对interactivePopGestureRecognizer的delegate进行重新赋值。

问题是当在topView的时候触发pop手势(沿着屏幕左边缘右滑),然后再进行push操作(比如说点击tableView某一行进入下一页),会出现push动画失效的情况,即UI还是在当前页,home键后重新进入恢复正常。
3492 次点击
所在节点    iDev
4 条回复
kobe1941
2015-07-20 10:47:04 +08:00
在BaseViewController里开启或禁用

-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
if ([self.navigationController.viewControllers count] > 1) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}else{

self.navigationController.interactivePopGestureRecognizer.enabled = NO;
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
}
}
Zrocky
2015-07-20 11:51:02 +08:00
我是在自定义的NavigationController中写的
- (void)viewDidLoad {
[super viewDidLoad];

self.delegate = self;

self.popGestureDelegate = self.interactivePopGestureRecognizer.delegate;
}


#pragma mark - UINavigationControllerDelegate

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

if (viewController == self.viewControllers[0]) {
self.interactivePopGestureRecognizer.delegate = self.popGestureDelegate;
}else {
self.interactivePopGestureRecognizer.delegate = nil;
}
}
yfmir
2015-07-20 11:51:04 +08:00
@kobe1941 感谢,经测试可行
yfmir
2015-07-20 11:53:36 +08:00
@Zrocky 我之前也考虑过这种方案,但是对我这个项目不太可行
之前把delegate抽成单例了,以为是我自己少实现了什么方法,结果钻牛角尖了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/206878

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX