iPhone:如何覆盖导航控制器中的后退按钮?

Ang*_*nio 6 iphone objective-c ios4

在我的应用中,我有一个基本的导航控制器.对于我的所有视图,除了一个,控制器按预期工作.

但是,特别是对于一个视图,我希望"后退"按钮不会返回上一个视图,而是转到我设置的视图.特别是它将返回2个视图并跳过一个.

在做了一些研究之后,我发现当它消失时我可以截取视图,所以我试着输入代码让它导航到我想要的页面:

- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
//i set a flag to know that the back button was pressed
if (viewPushed) {
    viewPushed = NO;   
} else {
    // Here, you know that back button was pressed
    mainMenu *mainViewController = [[mainMenu alloc] initWithNibName:@"mainMenu" bundle:nil];
    [self.navigationController pushViewController:mainViewController animated:YES];
    [mainViewController release];
}   
Run Code Online (Sandbox Code Playgroud)

}

这没用,所以有人有任何想法吗?

谢谢!!

Amy*_*all 13

在您的代码中,您似乎试图将另一个视图控制器推入堆栈,而不是从其中弹出一个额外的项目.

尝试使用此代码作为返回两个级别的代码:

NSArray *vcs = [self.navigationController viewControllers];
[self.navigationController popToViewController:[vcs objectAtIndex:[vcs count]-3];
Run Code Online (Sandbox Code Playgroud)

或者你可以用你自己的按钮完全替换后退按钮?在你的viewController中:

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(doSomething:)];

self.navigationItem.hidesBackButton = YES;
self.navigationItem.leftBarButtonItem = item;
[item release];
Run Code Online (Sandbox Code Playgroud)

然后你可以编写doSomething:方法来弹出堆栈中的两个项目,也许使用我上面发布的代码.