iOS-关于UINavigationController的title不显示问题

来源:互联网 发布:中国野生蜘蛛网络图鉴 编辑:程序博客网 时间:2024/05/18 03:33

今天在写一个界面的时候碰到了一个奇怪的问题。最开始我写了一个基类继承自UINavigationController

@interface BaseViewController : UINavigationController@end

在此基类中,隐藏了NavigationBar

@interface BaseViewController ()@end@implementation BaseViewController- (id)init{    if (self == [super init]) {        [self.navigationController setNavigationBarHidden:YES];    }    return self;}


新建一个主页面LoginViewController,继承自BaseViewController

#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中设置。


 

0 0
原创粉丝点击