如何在Swift中设置导航栏的标题?

时间:2015-11-14 10:41:27

标签: swift uinavigationcontroller uitabbarcontroller

我试图在Swift中设置Navigation Bar的标题,我设置Tab Bar并在Navigation Bar中没有显示任何内容,没有按钮,没有标题,没有任何内容。我使用了一些代码,但在我使用Tab Bar时它无效,当我删除Tab Bar时,代码正常工作,一切正常,Navigation Bar,标题显示和按钮正在展示。

我用于标题的代码是:

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationItem.title = "My Title"

}

Main.storyboard Navigation Controller我将Tab Bar ControllerNavigation Bar联系起来,如图所示。

enter image description here

那么,如何解决这个问题呢?问题是Tab Bar在使用$(document).on('click', '.accordion-toggle', function(e) { $(e.target).css('text-decoration','none'); var $_this = $(e.target).parent().next("div"); var $_inner = $_this.find('div:first-child'); if($_inner.hasClass('in')){ $_inner.removeClass("in"); $_this.removeClass("in"); } else { $_inner.addClass("in"); $_this.addClass("in"); } func_accordionToggle(e.target); }); var func_accordionToggle = function (e) { var $_this = $(e).parent().parent(); var id = $(e).parent().next("div").attr('id'); switch(id) { case 'collapseNL': $('#collapseOF').removeClass("in"); $('#collapseMLB').removeClass("in"); $('#collapseOF').find('div:first-child').removeClass("in"); $('#collapseMLB').find('div:first-child').removeClass("in"); break; case 'collapseOF': $('#collapseNL').removeClass("in"); $('#collapseMLB').removeClass("in"); $('#collapseNL').find('div:first-child').removeClass("in"); $('#collapseMLB').find('div:first-child').removeClass("in"); break; case 'collapseMLB': $('#collapseNL').removeClass("in"); $('#collapseOF').removeClass("in"); $('#collapseNL').find('div:first-child').removeClass("in"); $('#collapseOF').find('div:first-child').removeClass("in"); break; }; } 时无效。

3 个答案:

答案 0 :(得分:28)

由于Tab Bar实际上是Root View Controller的{​​{1}},因此您需要在Navigation Bar中设置UITabBarController的{​​{1}}函数,以便每次切换标签时都会发生这种情况:

title

但更好的方法就是让它反过来,就像这样

Correct view hierarchy

你应该为viewWillAppear的每个孩子勾选override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) self.tabBarController?.navigationItem.title = "My Title" self.tabBarController?.navigationItem.leftBarButtonItem = settingsButton //This is the IBOutlet variable that you previously added } ,因为它在语义上更正确,维护更简单。

答案 1 :(得分:9)

您的问题不明确,如果您提供的代码来自UIViewController UINavigationController并且显示navigationBar,您只需使用:

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

答案 2 :(得分:1)

UINavigationController类参考中,Apple写道:

  

init(rootViewController:UIViewController)
  参数   RootViewController的
  位于导航堆栈底部的视图控制器。该对象不能是UITabBarController类的实例。

但是如果你坚持的话,你可以这样做。但在这种情况下,tabbarController的ViewControllers都共享相同的标题,这是tabbarController的标题。

更好的方法是给每个tabbarController的viewControllers一个NavigationViewController。