我试图在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 Controller
与Navigation Bar
联系起来,如图所示。
那么,如何解决这个问题呢?问题是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;
};
}
时无效。
答案 0 :(得分:28)
由于Tab Bar
实际上是Root View Controller
的{{1}},因此您需要在Navigation Bar
中设置UITabBarController
的{{1}}函数,以便每次切换标签时都会发生这种情况:
title
但更好的方法就是让它反过来,就像这样
你应该为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。