【发布时间】:2014-07-08 09:37:36
【问题描述】:
我想标记我的UINavigationController 是否正在播放动画(推/弹出)。
我有一个 BOOL 变量 (_isAnimating),下面的代码似乎可以工作:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
_isAnimating = YES;
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
_isAnimating = NO;
}
但它在 iOS7 中使用滑动手势无法正常工作。假设我的导航是: root-> view A -> view B 。我目前在 B.
在滑动开始时(从 B 回到 A),调用函数“
navigationController:willShowViewController:animated:(BOOL)animated”,然后调用_isAnimating = YES。正常情况是滑动完成(返回A),调用函数“
navigationController:didShowViewController:animated:(BOOL)animated”,然后调用_isAnimating = NO。这种情况是可以的,但是:如果用户可能只是滑动了一半(一半过渡到 A),然后不想滑动到上一个视图(视图 A),他再次转到当前视图(再次停留 B)。然后函数“
navigationController:didShowViewController:animated:(BOOL)animated”没有被调用,我的变量值不正确(_isAnimating=YES)。
在这种异常情况下,我没有机会更新我的变量。有没有办法更新导航状态?谢谢!
【问题讨论】:
-
您是否尝试过使用 UIViewController 的 isBeingPresented 属性?
-
超!你试过
viewWillAppear:吗? -
@henryeverett 和 Thanh-NhonNGUYEN isBeingPresented 和 viewWillAppear: 在 A 或 B 内。我的代码不是 A 或 B,它是另一个类(它是 UINavigationController 的代表,它的角色是导航管理器)。另外,我的代码可能有很多视图,有A,B,C,D,......不仅A和B
-
你为什么不只跟踪各个 VC 的 viewWillAppear:(BOOL)animated 和 viewWillDisappear:(BOOL)animated 方法中的变量?添加一个委托协议并使 VC 符合它。如果这是你想要的,那应该让你的经理能够接收来自 VC 的回电。
-
@camdaochemgio 你有任何解决方案。我遇到了同样的问题
标签: ios ios7 uinavigationcontroller swipe