2013-05-09 95 views
2

我创建了一个具有3个ViewController的名称为ViewController的应用程序(ViewController,ViewController2,ViewController3) 在ViewController中存在一个按钮,用于检查文档文件夹中的文件或下载它。检查文件文件夹中是否存在文件转到ViewController3否则转到ViewController2并下载它。如何自定义故事板中的后退按钮

所以ViewController2是用于下载并具有UILable & UIProgress用于显示下载状态。如果文件不存在于此页面下载并转到ViewController3。

所以ViewController3是用于显示文件。 (这些页面连同push segue一样,像我的图片在底部)

当我去任何页面,我点击返回按钮返回前页右? 我什么时候点击第一页上的按钮,文件不存在,下载到第二页,然后完成下载,转到第3页。现在我想点击第3页上的后退按钮转到第1页第2页!!!!

我在故事板上工作。

enter image description here

回答

3

您可以通过截获在ViewController3后退按钮事件,并使用unwindSegues实现这一目标。 查看William Jockusch对此question的回复,了解如何拦截后退按钮事件。

要使用开卷塞格斯在这种特殊情况下,那么你需要:

1)在你的ViewController1创建一个方法,如

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

2)在你的故事板缩小,然后CTRL-从您的ViewController3拖到ViewController3场景中左侧的“退出”绿色框(以及红色框First Responder和所有控制器视图的子视图)。一个弹出窗口将显示,询问您想要将展开的继续连接到的IBAction,并且您应该能够选择刚刚创建的unwindToThisViewController操作。这将创造一个放松的过程。

3)从场景中选择此开卷赛格瑞,并给它一个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,你很好去。

编辑:因为unwind segues仅支持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. 
} 
+0

您也可以实现第2步没有缩小,按ctrl拖动您的视图下从黄色圆圈绿色退出符号广场,或者你甚至可以这样做,所有的左边的场景框! – micantox 2013-05-09 13:25:50

+0

正确....但它的工作在ios 6 – emma 2013-05-09 13:29:03

+1

对不起,你的意思是? – micantox 2013-05-09 13:33:36