我有一个 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 旋转到横向时,您将进入周视图。然后进入活动详情,旋转至头像。当您按下后退按钮时,您将进入日视图而不是周视图,因此会跳过带有周视图的控制器。