必需:
我想通过自定义导航后退按钮项启用iOS7滑动到后退功能。
当前实施:
经过大量的研究,我发现以下解决方案是最好的:
设置手势识别器的代理如下
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
问题:
基本的滑动到背部功能正在运行,但奇怪的是,有时候,正在被解散的viewController
相同,在弹出动作完成后会再次出现。
即。假设导航堆栈看起来像 A - &gt;乙即可。弹出 B 将再次显示 B 。这种情况一直持续到最终viewController B 实际上被解雇并且 A 出现。
所有viewController对象中的所有视图都会发生这种情况,而不仅仅是特定的视图。
此外,我已确保push
方法仅在所有位置调用一次。
我也尝试在每个点记录导航堆栈,但每个viewController
只有一个实例。
注意事项:
我需要在某些视图中禁用滑动功能。我通过将代码分别编写到disable
和enable
以及viewDidAppear
中的滑动手势来完成此操作。
请提供您宝贵的建议或解决此问题的方法。谢谢!
答案 0 :(得分:0)
简短回答:如果要添加不存在的弹出手势,则应向视图控制器添加UIScreenEdgePanGestureRecognizer
。修改现有的interactivePopGestureRecognizer
可能不是正确的方法。这样做:
[self addGestureRecognizer:({
UIScreenEdgePanGestureRecognizer *gesture =
[[UIScreenEdgePanGestureRecognizer alloc]
initWithTarget:self action:@selector(pop)];
gesture;
})];
和
-(void)pop {
// pop your view controller here
}
答案很长:强制interactivePopGestureRecognizer.delegate
会破坏您的代码。
如果您需要投射 self :
self.navigationController.interactivePopGestureRecognizer.delegate =
(id<UIGestureRecognizerDelegate>)self;
...这是因为self
不是UIGestureRecognizerDelegate
。以下应该编译,链接,构建和运行,或者你正在为自己设置麻烦:
self.navigationController.interactivePopGestureRecognizer.delegate = self;
请注意,假设您正在实施以下和之一,确保调整适用于strong>你拥有的一个手势:
UIGestureRecognizerDelegate
gestureRecognizerShouldBegin:
gestureRecognizer:shouldReceiveTouch:
gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
gestureRecognizer:shouldRequireFailureOfGestureRecognizer:
通过不断更改您未创建的gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:
的委托,您所做的只是阻止iOS行为。
UINavigationController -interactivePopGestureRecognizer
手势识别器负责将顶视图控制器弹出导航堆栈。 (只读)
用简单的英语:使用此值是您需要将该手势与您自己的手势相结合。但是你不应该修改它的行为:
...您可以使用此属性检索手势识别器,并将其与用户界面中其他手势识别器的行为联系起来......