假设我有带有 2 个按钮的 ViewController A,每个按钮都连接到 ViewController B 和 C(一个按钮连接到 View B,另一个按钮连接到 C)。从 ViewController CI 连接到 ViewController D。所有 ViewController 都带有导航栏,所以从视图 B 我可以返回到 A,从视图 D i 可以返回到 D->C->A。问题是当我在视图 D 到 B 之间进行切换时:执行了切换,但现在在 B 的导航栏中,我重新调整到视图 D,并且我希望 B 会像应有的那样返回到 A。解决办法是什么????
问问题
855 次
1 回答
2
据我所知,这可以使用两种方式来完成。
1) 在 D 控制器上使用自定义后退按钮
2)改变navigationController的栈,即D控制器类中self.navigationController.viewControllers的NSArray
使用自定义后退按钮
您可以在 D 控制器中执行以下操作。仅当 A 控制器是 navigationController 的 rootViewController 时才有效。如果您正在跟踪您的 A 控制器,那么您也可以使用以下内容
(NSArray *)popToViewController:(UIViewController )viewController 动画:(BOOL)动画
- (void)viewDidLoad { [super viewDidLoad]; UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(goBack:)]; self.navigationItem.leftBarButtonItem = backButton; self.navigationItem.hidesBackButton = YES; } -(void)goBack:(id)sender { [self.navigationController popToRootViewControllerAnimated:YES];
}
更改navigationController的堆栈
如果您想导航到特定的控制器,这很有用。但是从 B 回到 A 控制器后,后退按钮仍然显示,您可能需要通过一些更改来查看自己。不要尝试更改导航堆栈prepareForSegue
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableArray *controllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
NSMutableSet *controllersToRemove = [NSMutableSet new];
for (id viewController in controllers) {
if (![viewController isKindOfClass:[self class]]&&![viewController isKindOfClass:[NRViewController class]]) {
[controllersToRemove addObject:viewController];
}
}
for (id controller in controllersToRemove) {
[controllers removeObject:controller];
}
self.navigationController.viewControllers = controllers;
}
自定义后退按钮的编辑代码
如果你想要原来的后退按钮
您必须为此使用图像,代码如下
UIButton *backButton = [[UIButton alloc] initWithFrame: CGRectMake(0, 0, 60.0f, 30.0f)];
UIImage *backImage = [[UIImage imageNamed:@"back_button_normal.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 12.0f, 0, 12.0f)];
[backButton setBackgroundImage:backImage forState:UIControlStateNormal];
[backButton setTitle:@"Back" forState:UIControlStateNormal];
[backButton addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = backButtonItem;
于 2014-03-11T21:01:29.457 回答