如何从UIAlertView按钮展开segues

时间:2014-09-12 10:20:14

标签: ios objective-c xcode uistoryboardsegue

我有3个视图控制器。第一个是从我的根视图控制器以模态方式呈现的。

他们使用push从第一个到第三个位于导航堆栈中。

我的最终视图控制器(第三个)有UIAlertView,按下确定后,我想放松到第一个视图控制器。

但是,我读过有关这种展开的任何内容都会显示-(IBAction),它是从故事板按钮系统激活的。

如何从第三视图控制器退回到第一视图控制器?

[self performSegueWithIdentifier:segueString sender:self];

但它在尝试再次导航时崩溃了应用程序

3 个答案:

答案 0 :(得分:1)

所以你需要使用UIAlertView Delegate方法,如下所示

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
  //Using buttonIndex you could find whether OK or CANCEL is pressed and perform your popToRootViewController call.
  //Below on OK press then moving to root VC
  if (buttonIndex==0)
  {
     //OK is pressed...
    [self.navigationController popToRootViewControllerAnimated:YES];
  }
  else{ 
     //CANCEL is pressed...
  }
}

希望这可以帮到你。

答案 1 :(得分:0)

[self.navigationController popToRootViewController] 

将帮助您解决问题

答案 2 :(得分:0)

@ walle84给出的解决方案很棒......但不是Unwind Segue解决方案。如果您想使用真正的Unwind Segues,请按照此步骤进行操作。

在FirstViewController.m文件中,添加-reset:方法,以便您的代码如下所示:

#import "FirstViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

-(IBAction)reset:(UIStoryboardSegue *)segue {
    //you can do stuff here, if necessary
    //popToRootViewControllerAnimated doesn't allow it
    NSLog(@"Back to FirstViewController");
}

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

在ThirdViewController.m中,设置-alertView:clickedButtonAtIndex:方法,使代码如下所示:

#import "ThirdViewController.h"

@interface ThirdViewController () <UIAlertViewDelegate>

@end

@implementation ThirdViewController

- (IBAction)buttonPressed:(id)sender {
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"MyApp"
                                                      message:@"Do you want to reset to FirstViewController?"
                                                     delegate:self
                                            cancelButtonTitle:@"Cancel"
                                            otherButtonTitles:nil];

    [message addButtonWithTitle:@"Perform Unwind"];
    [message show];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 1) {
        [self performSegueWithIdentifier:@"myUnwindSegue" sender:self];
    }
}

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

然后,在您的故事板中,选择您的ThirdViewController场景,点击Third View Controller按钮并将其拖到Exit按钮(参见下图)。将出现一个弹出窗口。选择其中的Reset:链接。

enter image description here

完成后,选择unwind segue按钮(见下图),然后在属性检查器中将其名称设置为&#34; myUnwindSegue&#34; (见下图)。

enter image description here

如果您想了解有关Unwind Segues的更多信息,您可以观看WWDC 2012会话视频&#34;在您的应用中采用故事板&#34; [从38分钟开始]。