2010-01-11 146 views
20

我有正常的UIViewController,其中我添加了UINavigationControllerDelegate,我添加如下willappear?但它不起作用?UINavigationController标题不显示?

[self.navigationController setNavigationBarHidden:NO animated:YES]; 
    self.navigationController.navigationItem.title = @"hai"; 

回答

43

您应该在添加到导航控制器的视图控制器中设置标题。

即在添加视图控制器

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.title = @"My Title"; 
} 

或访问您的viewcontrollers的阵列直接

 AddFriendViewController *addFriendsView = [[AddFriendViewController alloc] initWithNibName:@"AddFriendViewController" bundle:nil]; 
     [self.navigationController pushViewController:addFriendsView animated:YES]; 
     [[self.navigationController.viewControllers objectAtIndex:0] setTitle:@"myTitle"]; 
     [addFriendsView release]; 
0

你肯定self.navigationController.navigationItem不是nil当设置标题?

14

每个视图控制器都有一个导航项目。您正在更改导航控制器的导航项...但除非导航控制器位于另一个导航控制器内,否则将无法看到!取而代之的

self.navigationController.navigationItem.title = @"hai"; 

你想

self.navigationItem.title = @"hai"; 

,或者,如果您的导航项目的标题是零,导航控制器会根据您的视图控制器的标题:

self.title = @"hai"; 

您应该简单地设置查看标题,导航栏和标签栏都使用该标题,除非您想为某些原因为每个标题指定不同的标题。

0

如果没有viewcontroller被推入堆栈,即。你在显示栈(有时称为RootViewController的)的顶部视图 - 控制你可以,你必须使用的setTitle

[rootViewController setTitle:@"Title"]; 

注意做到这一点 - rootViewController.title = @“标题”,通常会无法正常工作。

其实,你可以用任何viewcontroller来做,即使它不是viewDidLoad的。如果它的编程方式创建,只是

myViewController *mvc=[[myViewController alloc] initWithNibName:@"nameofnibwithout.xib" bundle:nil]; 

创建,或者你可以声明其作为应用程序的委托对象,使其成为一个IBOutlet,创建一个UIViewController并设置其类myViewController,并将其连接到IBOutlet中所以它不是零。

0

您可能需要在控制器上的“属性”选项卡中将导航栏设置为“带提示的黑色导航栏”。这对我来说很有用。

1

在我的情况下,标题是不可见的iOS6,当我在init方法对其进行设置:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

    if (self) { 
     self.title = LS(@"Favorites"); 
     self.tabBarItem.title = LS(@"Favorites"); 
     self.tabBarItem.image = [UIImage imageNamed:@"star"]; 
    } 

    return self; 
} 

因此,它应该被从那里ViewDidLoad