【问题标题】:UINavigationBar - Set title programmatically?UINavigationBar - 以编程方式设置标题?
【发布时间】:2011-04-10 11:55:13
【问题描述】:

我有一个标签栏应用程序,每个标签都有不同的视图。每个视图都有一个 UINavigationBar,在 Interface Builder 上设置了标题。我想根据 ViewDidLoad 方法中的一个子句来更改标题,所以如果 x { 更改标题 }。

我试过self.title = @"title",但这改变了标签栏项目本身的标题。

那么,这是怎么做到的呢?

【问题讨论】:

    标签: ios iphone xcode4 uinavigationbar


    【解决方案1】:

    我已经使用类似这样的代码以编程方式设置了标题:

    navBar.topItem.title = @"title";
    

    其中 navBar 被声明为 IBOutlet UINavigationBar 链接到界面构建器中的导航栏。这在我的应用程序中有效;但是,我没有使用标签栏。

    如果 navBar.topItem 是选项卡栏项目,我看不到您可以更改出现在导航栏上的标题而不更改选项卡栏项目上的标题的方法,因为导航栏的 topItem 和选项卡bar item 是同一个对象。

    【讨论】:

    • 工作完美,知道我忘了做某事;那就是将 IBOutlet UINavigationBar 链接到栏本身。顺便说一句,标题和标签文本是相互独立的。
    • 这有一个问题,当你有一个后退按钮时,它会更改后退按钮的标题而不是导航栏,请检查@CrisP 的响应。
    • 问题是询问具有 UINavigationBar 的视图,这与将视图控制器推送到其上的 UINavigationController 不同。 ChrisP 的答案当然是 UINavigationController 上下文中的正确答案,但不适用于问题中讨论的情况。
    • self.navigationItem.title = @"title";我相信是最简单最容易的方法
    【解决方案2】:

    使用

    self.navigationItem.title = @"the title";
    

    因为设置 navBar.topItem.title 并非在所有情况下都有效。

    【讨论】:

    • NB 只能与与视图控制器关联的 UINavigationBar 一起使用。来自文档“:这是 UINavigationItem 的唯一实例,当它被推送到导航栏时,它代表视图控制器。第一次访问此属性时,会创建 UINavigationItem。因此,如果出现以下情况,则不应访问此属性你没有使用导航控制器”
    【解决方案3】:

    使用这个:

        CGRect navBarFrame = CGRectMake(0, 0, self.tableView.frame.size.width, 44.0);
        UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:navBarFrame];
    
        UINavigationItem *navItem = [UINavigationItem alloc];
        navItem.title = @"Your Title";
    
        [navBar pushNavigationItem:navItem animated:false];
    
    [self.view addSubView:navBar]; 
    

    self.tableView.tableHeaderView = navBar; etc
    

    【讨论】:

      【解决方案4】:

      如果类是 UIViewController 类型,那么你可以在 viewDidLoad 方法中设置标题。

          [self setTitle:@"My Title"];
      

      【讨论】:

      • 这只是导致他的问题的原因:它也改变了标签栏项目的标题,这不受欢迎。
      【解决方案5】:

      在 ViewController.m 的 ViewDidLoad 中写,

      self.navigationItem.title=@"Hello World";
      

      这是输出:

      【讨论】:

        【解决方案6】:

        创建IBOutletUINavigationBar

        navigationBar.topItem.title = @"Title";
        

        希望这会有所帮助。

        【讨论】:

          【解决方案7】:

          我使用了以下内容:

          self.navigationController.navigationBar.topItem.title = @"Title";
          

          但是,我还必须在调度块中调用它,因为在没有它的 viewDidLoad 中调用它时它不会更改标题。

          【讨论】:

          • 您提到您还在调度块中调用它 - 这应该包含在您的示例代码中。
          【解决方案8】:

          请注意,为了让标题全部显示,导航控制器的委托必须设置为导航栏本身,否则标题将永远不会显示!

          【讨论】:

            【解决方案9】:

            您也可以在 ViewController 或 TableViewController 下的 ViewDidLoad 中使用

            _title = @"Title";
            

            self.title = @"Title";
            

            【讨论】:

              【解决方案10】:

              我在 Swift 5 中实现了这种方式

              override func viewDidLoad() {
                  super.viewDidLoad()
                  navigationItem.title = "Title"
              }
              

              【讨论】:

                【解决方案11】:

                试试这个,

                self.navigationItem.title = @"Your title";
                

                【讨论】:

                  猜你喜欢
                  • 2020-05-31
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-05-08
                  • 1970-01-01
                  • 2015-10-15
                  • 1970-01-01
                  相关资源
                  最近更新 更多