iOS中的UINavigationController标题似乎已损坏

时间:2016-08-30 23:50:02

标签: ios uinavigationcontroller title modalviewcontroller

当我以模态方式呈现UINavigationController然后推送(没有动画)一些UIView控制器时,最终显示的navigationItem.title与我期望的不同。

我试图缩小我的问题,并提出以下简短代码来复制问题:

@implementation DummyRootVC
- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:[[Dummy1VC alloc] init]];
    [self presentViewController:nc
                           animated:false
                         completion:nil];
}
@end

@implementation Dummy1VC
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor=[UIColor whiteColor];
    self.navigationItem.title= @"DUMMY1";
    [self.navigationController pushViewController:[[Dummy2VC alloc] init] 
                                         animated:false];
}
@end

@implementation Dummy2VC
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.title= @"DUMMY2";
    self.view.backgroundColor=[UIColor yellowColor];
    [self.navigationController pushViewController:[[Dummy3VC alloc] init] 
                                         animated:false];
}
@end

@implementation Dummy3VC
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor=[UIColor orangeColor];
    self.navigationItem.title= @"DUMMY3";
    [self.navigationController pushViewController:[[Dummy4VC alloc] init] 
                                         animated:false];
}
@end

@implementation Dummy4VC
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.title= @"DUMMY4";
    self.view.backgroundColor=[UIColor greenColor];
    for (UIViewController* vc in self.navigationController.viewControllers) {
        NSLog(@"VC Stack: %@ Title:%@",vc,vc.navigationItem.title);
    }
    NSLog(@"End");
}
@end

在AppDelegate中我设置了:

 self.window.rootViewController = [[DummyRootVC alloc] init];

当运行该代码时,显示的标题是“Dummy 2”,后退按钮被命名为“Dummy 4”,而我实际上会期望标题为“Dummy 4”和一个名为“Dummy 3”的后退按钮。 / p>

日志按预期显示正确的ViewController-Stack和backgroundColor(正如预期的那样)为绿色(有趣的是在一次“后退”点击后仍为绿色):

  

VC Stack:标题:DUMMY1

     

VC Stack:标题:DUMMY2

     

VC Stack:标题:DUMMY3

     

VC Stack:标题:DUMMY4

     

结束

我可以解决这个问题,因为它似乎与非动画设置有点相关,并且模拟地呈现了导航控制器,但我想了解潜在的问题......

有人能为我提供一些见解吗?这是一些错误还是我正在做(我怀疑)只是错误的方式?

谢谢!

1 个答案:

答案 0 :(得分:1)

将推送/存在从segment.sort(Comparator.comparingInt(el -> el[0]).thenComparingInt(el -> el[1])); 放到viewDidLoadviewWillAppear,以便viewController可以正确初始化它的子视图以避免问题:D