gpt4 book ai didi

ios - 使用导航 Controller 在 View Controller 之间进行切换

转载 作者:行者123 更新时间:2023-11-28 22:13:30 24 4
gpt4 key购买 nike

假设我有带 2 个按钮的 ViewController A,每个都连接到 ViewController B 和 C(一个按钮到 View B,另一个按钮到 C)。从 ViewController C I segueing 到 ViewController D。所有的 ViewControllers 都带有导航栏,因此我可以从 View B 返回到 A,从 View D 可以返回到 D->C->A。问题是当我在 View D 和 B 之间进行切换时:执行了切换,但现在在 B 的导航栏中我重新调整到 View D 并且我希望 B 将像它应该的那样返回到 A。有什么解决办法????

最佳答案

据我所知,这可以通过两种方式完成。

1) 在 D Controller 上使用自定义后退按钮

2) 更改navigationController 的堆栈,即D Controller 类中的self.navigationController.viewControllers 的NSArray

使用自定义后退按钮

您可以在 D Controller 中执行以下操作。仅当 A Controller 是 navigationController 的 rootViewController 时才有效。如果您正在跟踪 A Controller ,那么您也可以使用以下内容

  • (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的栈

如果你想导航到一个特定的 Controller ,这很有用。但是从 B 返回 A Controller 后,后退按钮仍然显示,你可能必须通过进行一些更改来查看自己。不要尝试更改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;

关于ios - 使用导航 Controller 在 View Controller 之间进行切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22333441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com