我有3个视图控制器。第一个是从我的根视图控制器以模态方式呈现的。
他们使用push
从第一个到第三个位于导航堆栈中。
我的最终视图控制器(第三个)有UIAlertView
,按下确定后,我想放松到第一个视图控制器。
但是,我读过有关这种展开的任何内容都会显示-(IBAction)
,它是从故事板按钮系统激活的。
如何从第三视图控制器退回到第一视图控制器?
[self performSegueWithIdentifier:segueString sender:self];
但它在尝试再次导航时崩溃了应用程序
答案 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:
链接。
完成后,选择unwind segue
按钮(见下图),然后在属性检查器中将其名称设置为&#34; myUnwindSegue&#34; (见下图)。
如果您想了解有关Unwind Segues的更多信息,您可以观看WWDC 2012会话视频&#34;在您的应用中采用故事板&#34; [从38分钟开始]。