我遇到的问题是,当我尝试使用当前 ViewController
的 iOS7 viewDidDisappear
中的默认返回 swipeGesture
弹出 View Controller 时> 并不总是在 viewWillDisappear
之后被调用。我使用 UINavigationController
作为 rootViewController
。
在这种情况下,应用程序仍然被触发并且不会收到任何用户输入。有时应用程序崩溃,当我查看日志时:它显示“无法将自身添加为 subview
”,并且在崩溃日志中,它显示 EXC_BAD_ACCESS
。如何解决这个问题,但是当我在导航栏应用程序中使用后退按钮时正常工作。
- (void)viewWillDisappearBOOL)animated
{
// [self.navigationController.navigationBar setAlpha:1.0f];
[self createBarButtonITems];
self.navigationItem.title = @"Back";
}
- (void)viewDidDisappearBOOL)animated
{
[self zoomOutTableWithoutAnimation];
}
-(void)zoomOutTableWithoutAnimation
{
backgroundView.frame = CGRectMake(0,0,320,480);
backgroundView.transform=CGAffineTransformMakeScale(1, 1);
sideMenuTableView.transform=CGAffineTransformMakeScale(0.5,0.5);
sideMenuTableView.frame = CGRectMake(0,150,self.view.frame.size.width/2, self.view.frame.size.height);
sideMenuTableView.hidden = YES;
}
正如您提到的向后滑动手势,这可能是由于交互式弹回。 正如 WWDC 2013 中提到的, session 使用 View Controller 的自定义转换,您不能假设 viewWillDisappear 后面会跟着 viewDidDisappear。 viewWillAppear 和 viewDidAppear 也是如此。
我不知道你为什么要打电话 [自行创建BarButtonITems] 在 viewWillDisappear 中,您的意思是 viewWillAppear 吗? 无论如何,在我看来 [self createBarButtonITems] 产生了一些副作用。
尝试在 viewWillDisappear 中使用以下代码来撤消副作用:
- (void)viewWillDisappear
{
[self doSomethingHasSideEffect];
id <UIViewControllerTransitionCoordinator> coordinator;
coordinator = [self transitionCoordinator];
if(coordinator && [coordinator initiallyInteractive])
{
[coordinator notifyWhenInteractionEndsUsingBlock:
^(id <UIViewControllerTransitionCoordinatorContext> ctx)
{
if(ctx.isCancelled)
{
[self undoAnySideEffect]
}
}];
}
}
关于iOS 7 问题 : viewDidDisappear not being called after viewWillDisappear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21038639/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |