【发布时间】:2013-10-07 14:38:36
【问题描述】:
我有一个 UINavigationController 和一个由 3 个简单控制器组成的链。每个都有一个按钮。当按下一个按钮时,下一个控制器被按下。 ViewController1 -> ViewController2 -> ViewController3。当我在第三个视图上按下后退按钮时,我想移动到第一个视图。必须使用 backBarButtonItem。这是第二个控制器的代码:
#import "ViewController2.h"
static BOOL isBackButtonPressed;
@implementation ViewController2
- (void)viewDidLoad {
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"back from 3" style:UIBarButtonItemStyleBordered target:nil action:nil];
[super viewDidLoad];
}
- (void)viewWillAppear:(BOOL)animated {
if (isBackButtonPressed) {
[self.navigationController popViewControllerAnimated:YES];
} else {
isBackButtonPressed = YES;
}
[super viewWillAppear:animated];
}
@end
但是当我在第三个视图上按下返回按钮时,我会返回到第二个视图而不是第一个视图。您能帮我在第三个视图上按返回按钮返回到第一个视图吗? 我尝试了答案中的建议,但没有帮助。
- 向 backBarButtonItem 添加选择器没有帮助,因为它从未被调用过。
- 在 viewWillDisappear 方法中添加 [self.navigationController popToRootViewControllerAnimated:YES] 也不起作用。我不知道为什么。我认为实际的问题是 backBarButtonItem 是如何工作的。 还有其他建议吗?
我尝试实现的行为存在于 iPhone 上的日历中。当您将 iPhone 旋转到横向时,您将进入周视图。然后进入活动详情,旋转至头像。当您按下返回按钮时,您将进入日视图而不是周视图,因此会跳过具有周视图的控制器。
【问题讨论】:
-
只是在您的代码中提醒您忘记调用
supper,如[super viewDidLoad]和[super viewDidLoad:animated]。 -
我编辑了我的代码,但这对行为没有影响。
标签: objective-c xcode uinavigationcontroller backbarbuttonitem