在iOS7中,UINavigationController带有边缘滑动的exceptionpopup操作

我发现了一个看起来像iOS7的错误,同时用UINavigationControllerpopup视图控制器(VC)边缘滑动。

我设置为以下VC层次结构:

UINagivationController | --- UIVewControllerR (root) | --- UIViewControllerA | --- UIViewControllerB 

我试图通过边缘滑动popupUIViewControllerB,并不断popupUIViewControllerA。 它运作良好。 但是,如果第一次刷卡动作被取消,然后重试popup,我发现一个错误。 popupUIViewControllerA后,我发现UIViewControllerA的导航栏项目仍然显示,尽pipepopupUIViewControllerA了。

总之,UIViewControllerR显示了UIViewControllerA的导航栏项目的项目。

没有可能影响UINavigationController转换的代码。
这是在iOS7上的错误?

我find了解决这个问题的办法。

我所做的是在我的UINagivationController类中,设置一个BOOL属性

 @property (nonatomic, assign) BOOL interactivePopGestureComplete; 

然后在那个UINagivationController的init中

 self.interactivePopGestureComplete = YES; if([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) [self.interactivePopGestureRecognizer addTarget:self action:@selector(defaultGestureAction:)]; 

和这样的动作方法:

 - (void)defaultGestureAction:(UIGestureRecognizer *)sender { if(sender.state == UIGestureRecognizerStateBegan || sender.state == UIGestureRecognizerStateChanged) self.interactivePopGestureComplete = NO; else self.interactivePopGestureComplete = YES; } 

并在viewWillAppear:或viewWillLayoutSubviews :(在viewControllers哪里有这个问题),无论你在哪里更新navigationBarButtons和navigationBar这两个方法,只要检查是否

 // Lets say our UINagivationController class name is NavigationCon NavigationCon *navCon = (NavigationCon *)self.navigationController; if(navCon.interactivePopGestureComplete) { // only then update navigationBar } 

我可以理解你面临的问题

有两种情况可能发生。

1.你在哪里做导航栏文本在所有控制器的变化。如果你已经完成viewWillAppear或viewDidAppear那么这可能发生..你将不得不这样做viewDidLoad

2.在转换更改结束之前在导航栏上进行更改。

告诉我,如果它可以帮助你。