今天在写一个界面的时候碰到了一个奇怪的问题。最开始我写了一个基类继承自UINavigationController
@interface BaseViewController : UINavigationController
@end
在此基类中,隐藏了NavigationBar
@interface BaseViewController ()
@end
@implementation BaseViewController
- (id)init{
if (self == [super init]) {
[self.navigationController setNavigationBarHidden:YES];
}
return self;
}
#import "BaseViewController.h"
@interface LoginViewController : BaseViewController
@end
在处理完相关逻辑后,我需要跳转到新的页面,并显示NavigationBar及title,然后我发现,不管是在当前页面设置title
ForgetPasswordViewController *forgetVC = [[ForgetPasswordViewController alloc] init];
[forgetVC.navigationController setNavigationBarHidden:NO];
forgetVC.navigationItem.title = @"忘记密码";
[self presentViewController:forgetVC animated:YES completion:nil];
还是Push到该页面之后设置title
#import "ForgetPasswordViewController.h"
@interface ForgetPasswordViewController ()
@end
@implementation ForgetPasswordViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor grayColor];
self.title = @"忘记密码";
self.navigationItem.title = @"忘记密码";
}
均无法显示title.
经过研究,从苹果的文档看,
title这个属性实际上是属于UIViewController而不属于UINavigationController。所以,这个属性是从UIViewController上面继承过来的。而不是UINavigationController上面的名字。由于UINavigationController属于容器,所以最少需要一个RootController。然后在RootController的viewDidLoad设置title而不是在UINavigationController的subclass中设置。