我遇到的问题是,当我尝试使用当前swipeGesture
的iOS7 viewDidDisappear
中的默认后退ViewController
来弹出视图控制器时,并不总是在{{viewWillDisappear
之后调用1}}。我使用UINavigationController
作为rootViewController
。
应用程序仍然受到攻击,并且在此方案之后未收到任何用户输入。有时应用程序会崩溃,当我查看日志时:它显示“无法将自己添加为subview
”并在崩溃日志中显示EXC_BAD_ACCESS
。如何解决此问题,但当我使用时导航栏应用程序中的按钮正常工作。
- (void)viewWillDisappear:(BOOL)animated
{
// [self.navigationController.navigationBar setAlpha:1.0f];
[self createBarButtonITems];
self.navigationItem.title = @"Back";
}
- (void)viewDidDisappear:(BOOL)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;
}
答案 0 :(得分:1)
正如您提到的向后滑动手势,这可能是由于交互式回弹。 正如在WWDC 2013中提到的,会话使用视图控制器的自定义转换,您不能假设viewDidDisappear后面会跟随viewDidDisappear。 viewWillAppear和viewDidAppear也一样。
我不确定你为什么要打电话 [self createBarButtonITems] 在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]
}
}];
}
}
答案 1 :(得分:0)
从你的代码我可以理解的是你需要一个标题为@“Back”的后退按钮,而不是之前的视图控制器标题
只需在视图控制器中添加此代码,在其中您尝试执行上述内容视图的加载方法
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:(IS_IOS_7 ? @"" : @"Back") style:UIBarButtonItemStylePlain target:Nil action:nil];
self..navigationItem.backBarButtonItem = backButton;
答案 2 :(得分:0)
添加[super viewWillDisappear:animated];
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self createBarButtonITems];
self.navigationItem.title = @"Back";
}