【问题标题】:Updating UINavigationBar Title更新 UINavigationBar 标题
【发布时间】:2015-06-11 19:41:32
【问题描述】:

我在左侧有一个拆分视图控制器和一个导航控制器。随着视图被推送到导航控制器上,我正在尝试更改导航栏标题。问题似乎是文本只能在viewWillAppear 中更新。如果我在初始加载后尝试更改文本,它不会更新。起初我以为我需要在 NavigationItem 上调用 setNeedsDisplay,但它没有属性。我不明白,因为相同的代码在 viewWillAppear 中有效,但在视图显示后就不行了。

我正在使用:

(void)viewWillAppear:(BOOL)animated{
        self.title = @"blah";
        ...
}

【问题讨论】:

    标签: iphone objective-c ios uinavigationcontroller uinavigationbar


    【解决方案1】:

    应该是self.navigationItem.title = @"Some Title";

    【讨论】:

    • 我试过self.navigationItem.titleself.navigation.navigationItem.titleself.title,都没有更新。
    • 好吧,我建议您将 titleView 设置为标签,然后更新它。
    • 奇怪的是,这不起作用。我在推送的 ViewController 的 viewDidLoad 中添加了一个标准的 UILabel,然后执行[((UILabel*)[pushedVc.navigationItem.titleView.subviews objectAtIndex:0]) setText:@"Blah"];,但标题视图仍设置为我在viewDidLoad 中创建标签时使用的初始化标签的文本。
    • 如果您已将titleView 设置为标签,则不需要执行所有子视图的操作。 [(UILabel *)self.navigationItem.titleView setText:@"My Title"]
    • self.navigationItem.titleView = myNewLabel;
    【解决方案2】:

    我已经建立了一个简单的项目,其中初始控制器嵌入在导航控制器中,第二个控制器被推送到导航堆栈中。第二个控制器有一个调用这段代码的按钮:

    - (IBAction)changeTitle:(id)sender {
    
        static unsigned int i = 1;
    
        self.navigationItem.title = [NSString stringWithFormat:@"Number of changes: %ud", i];
    
        i++;
    
    }
    

    它按预期工作。显然,它发生在所有出现/布局事件之后。所以你的问题出在其他地方。也许您所指的self 是一个错误的控制器。

    【讨论】:

      【解决方案3】:

      self.navigationBar.topItem.title = [NSString stringWithFormat:@"TOP"];

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-04
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        • 2014-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多