iOS 7问题:在viewWillDisappear之后没有调用viewDidDisappear

时间:2014-01-10 07:41:33

标签: ios iphone ios7

我遇到的问题是,当我尝试使用当前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;
}

3 个答案:

答案 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";
}