viewWillDisappear: 判断视图控制器是被弹出还是展示子视图控制器

138

我正在努力寻找一个好的解决方法来解决这个问题。在视图控制器的-viewWillDisappear:方法中,我需要找到一种方式来确定是因为视图控制器被推到导航控制器的堆栈上,还是因为视图控制器消失了,因为它已经被弹出。

目前,我正在设置标志,例如isShowingChildViewController,但它变得相当复杂。我认为唯一可以检测它的方法是在-dealloc方法中。

13个回答

0

在iOS 6+中,转场可以是处理这个问题的一种非常有效的方式。如果您在Interface Builder中为特定的转场指定了标识符,您可以在prepareForSegue中检查它。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"LoginSegue"]) {
       NSLog(@"Push");
       // Do something specific here, or set a BOOL indicating
       // a push has occurred that will be checked later
    }
}

-1

这里有一个类别可以完成与sbrocket答案相同的事情:

标题:

#import <UIKit/UIKit.h>

@interface UIViewController (isBeingPopped)

- (BOOL) isBeingPopped;

@end

源代码:

#import "UIViewController+isBeingPopped.h"

@implementation UIViewController (isBeingPopped)

- (BOOL) isBeingPopped {
    NSArray *viewControllers = self.navigationController.viewControllers;
    if (viewControllers.count > 1 && [viewControllers objectAtIndex:viewControllers.count-2] == self) {
        return NO;
    } else if ([viewControllers indexOfObject:self] == NSNotFound) {
        return YES;
    }
    return NO;
}

@end

-1

我猜你是指当你说“推到堆栈上”时,你的视图被导航控制器下移动。我建议使用viewDidUnload方法,添加一个NSLog语句来向控制台输出一些信息,以便你可以看到发生了什么,你可能还想在viewWillDisappear添加一个NSLog


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接