iPhone:如何覆盖导航 Controller 中的后退按钮?

标签 iphone objective-c ios4

在我的应用程序中,我有一个基本的导航 Controller 。对于我的所有 View ,除了一个 View , Controller 都正常工作。

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

在做了一些研究后,我发现我可以在 View 消失时拦截它,所以我尝试输入代码让它导航到我想要的页面:

- (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];
}   

那行不通,所以有人有任何想法吗?

谢谢!!

最佳答案

在您的代码中,您似乎试图将另一个 View Controller 插入堆栈,而不是从中弹出一个额外的项目。

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

NSArray *vcs = [self.navigationController viewControllers];
[self.navigationController popToViewController:[vcs objectAtIndex:[vcs count]-3];

或者,您可以将后退按钮完全替换为您自己的按钮吗?在你的 View Controller 中:

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

self.navigationItem.hidesBackButton = YES;
self.navigationItem.leftBarButtonItem = item;
[item release];

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

关于iPhone:如何覆盖导航 Controller 中的后退按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4630158/

相关文章:

php - 将照片从iPhone上传到Web服务器

ios - UIView 动画 block 暂停动画和完成代码

ios4 - Icon.png出现问题(在顶级应用程序包装器下找不到在Info.plist中指定的图标:Icon.png(-19007))

objective-c - 计算圆内的随机x,y坐标

ios - 如何使用私有(private)框架解锁 iOS 设备?

ios - Phonegap CordovaLib 语义错误

c# - GC 语言的优化,有什么想法吗?

iphone - UITextView 自定义自动补全

iphone - 获取 iPhone 的相机分辨率?

objective-c - TableView 数据在模拟器上不可见