2

我创建了一个具有 3 个 ViewController 的应用程序,其名称为: (ViewController,ViewController2,ViewController3) 在 ViewController 中存在一个用于检查文件夹中的文件或下载它的按钮。例如首先检查文件是否存在于文件夹中转到 ViewController3否则转到 ViewController2 并下载它。

因此 ViewController2 用于下载,并具有 UILable 和 UIProgress 用于显示下载状态。如果此页面中不存在文件已下载并转到 ViewController3。

所以 ViewController3 用于显示文件。(这些页面与底部的图像一样与 push segue 连接在一起)

当我转到任何页面并单击返回按钮返回上一页时,对吗?我什么时候在第一页单击按钮,文件不存在,在第二页下载然后完成下载转到第 3 页。现在我想什么时候在第 3 页单击返回按钮转到第 1 页没有第 2 页!!!!

我在故事板中工作。

在此处输入图像描述

4

1 回答 1

3

您可以通过拦截 ViewController3 中的后退按钮事件并使用 unwindSegues 来实现此目的。查看 William Jockusch 对此问题的回复,了解如何拦截后退按钮事件。

要在这种特殊情况下使用 unwind segues,您需要:

1)在您的 ViewController1 中创建一个方法,例如

- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
    NSLog(@"Rolled back");
}

2)在您的故事板中缩小,然后从您的 ViewController3 按住 ctrl 并拖动到包含在您的 ViewController3 场景中的左侧的“退出”绿色框(以及红色框 First Responder 和所有控制器视图的子视图)。将显示一个弹出窗口,询问您要将 unwind segue 连接到哪个 IBAction,您应该能够选择unwindToThisViewController刚刚创建的操作。这将创建一个 unwind segue。

3)从场景框中选择这个展开的segue并给它一个ID,例如“unwindToStart”

4) 最后,在您的 ViewController3 类中,重写该方法viewWillDisappear,如下所示:

-(void) viewWillDisappear:(BOOL)animated 
{
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound)
        [self performSegueWithIdentifier:@"unwindToStart" sender:self];
    [super viewWillDisappear:animated];
}

这将拦截后退按钮事件并展开到您的 ViewController1,您就可以开始了。

编辑:由于仅在 iOS 6 及更高版本上支持展开转场,如果您在早期版本的 iOS 上需要此功能,我认为唯一的方法是从 ViewController3 的 viewDidLoad 中的 NavigationController 堆栈中手动删除 ViewController2。像下面的代码应该做的事情:

- (void)viewDidLoad
{   
    NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
    for(UIViewController* vc in self.navigationController.viewControllers)
    {
        if ([vc isKindOfClass:[ViewController2 class]]) {
            [viewControllers removeObject:vc];
            break;
        }
    }
    self.navigationController.viewControllers = [NSArray arrayWithArray:viewControllers];
    // Do any additional setup after loading the view.
}
于 2013-05-09T13:07:06.333 回答