首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在iOS7中,具有边缘滑动的UINavigationController的异常弹出行为

在iOS7中,具有边缘滑动的UINavigationController的异常弹出行为
EN

Stack Overflow用户
提问于 2014-01-22 18:13:51
回答 2查看 571关注 0票数 2

我发现一个看起来像iOS7错误,而在UINavigationController中弹出视图控制器(VC)与边缘滑动。

我建立了以下VC层次结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UINagivationController
  |
  --- UIVewControllerR (root)
            |
            --- UIViewControllerA
                      |
                      --- UIViewControllerB  

我试图通过边缘滑动弹出UIViewControllerB,并不断地弹出UIViewControllerA。效果很好。但是,如果第一次滑动操作被取消,然后重新尝试弹出它,我发现一个bug出现了。弹出UIViewControllerA之后,我发现尽管弹出了UIViewControllerA,UIViewControllerA的导航栏项目仍然显示。

简而言之,UIViewControllerR是用UIViewControllerA的导航栏项显示的。

没有可能影响UINavigationController转换的代码。

它是iOS7上的一个bug吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-22 23:18:02

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@property (nonatomic, assign) BOOL interactivePopGestureComplete;

然后在那个UINagivationController的开头

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.interactivePopGestureComplete = YES;
    if([self respondsToSelector:@selector(interactivePopGestureRecognizer)])
        [self.interactivePopGestureRecognizer addTarget:self action:@selector(defaultGestureAction:)];

行动方法是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)defaultGestureAction:(UIGestureRecognizer *)sender
{
    if(sender.state == UIGestureRecognizerStateBegan || sender.state == UIGestureRecognizerStateChanged)
        self.interactivePopGestureComplete = NO;
    else
        self.interactivePopGestureComplete = YES;
}

在viewWillAppear:或viewWillLayoutSubviews:(在存在此问题的viewControllers中),在这两种方法中您要更新navigationBarButtons和navigationBar的地方,只需检查

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Lets say our UINagivationController class name is NavigationCon
NavigationCon *navCon = (NavigationCon *)self.navigationController;
if(navCon.interactivePopGestureComplete)
{
    // only then update navigationBar
} 
票数 2
EN

Stack Overflow用户

发布于 2014-01-22 22:09:26

我能理解你面临的问题

有两种情况可能发生。

1.您在哪里完成了导航栏文本的更改,您在viewWillAppear或viewDidAppear中完成了所有的导航栏文本更改,那么happen..You可能必须在viewDidLoad中完成它

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

告诉我它是否对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21298051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文