如何更改独立于tabbar项标题的uiviewcontroller标题

Atm*_*tma 97 cocoa-touch uitabbarcontroller uiviewcontroller ios

我正在设置我的视图控制器标题,在视图中加载:

self.title = @"my title";
Run Code Online (Sandbox Code Playgroud)

在此之前,我在故事板中为其嵌入的视图控制器和导航控制器设置标题.我将其设置为:"标题";

当我单击保持视图控制器的选项卡标签栏项目的标题并uiviewcontroller更改为:我的标题

我想让视图控制器更改,但标签栏项目保留标题:标题

我怎么能做到这一点?

Cra*_*ens 201

听起来你想要改变导航栏中的标题而不是标签栏中的标题.这应该这样做.

[self.navigationItem setTitle:@"my title"];
Run Code Online (Sandbox Code Playgroud)

迅速:

self.navigationItem.title = "My Title"
Run Code Online (Sandbox Code Playgroud)

  • 这行不通。我不确定发生了什么。 (4认同)
  • 确保,如果您仍在使用 self.title 来设置 uitabbar 标题,请在设置 self.navigation setTitle 后否则它将不起作用 (2认同)
  • 在xcode 9和ios 11中的swift 4中,它显示错误的标题的明确使用 (2认同)

Sim*_*amp 159

所以对于那些仍然没有得到它的人(像我一样)

self.navigationItem.title = @"my title";设置导航栏标题.

self.tabBarItem.title = @"my title";设置标签栏标题.

self.title = @"my title";设置这两个.


Sur*_*gch 16

迅速

设置顶部栏标题

self.navigationController?.navigationBar.topItem?.title = "top title"
Run Code Online (Sandbox Code Playgroud)

设置标签项标题

self.tabBarController?.tabBar.items?[0].title = "tab title"
Run Code Online (Sandbox Code Playgroud)

设置两个标题

self.title = "both titles"
Run Code Online (Sandbox Code Playgroud)

  • 这是我可以在配置中设置顶部栏标题的唯一方法,不确定为什么“ self.navigationItem.title”对我不起作用。 (2认同)

Zai*_*han 7

对于Swift使用这个,

self.navigationItem.title = "Navigation bar title" 
self.title = "Tab bar title"
Run Code Online (Sandbox Code Playgroud)


Pav*_*van 6

注意:如果在每个视图控制器的根目录下都有一个带有导航控制器的标签栏控制器,则设置视图控制器上的标签栏项目不会影响标题(如果您正在设置)navigationItem.title.您需要将其设置tabBarItem到导航控制器上,而不是从标签栏控制器中拾取它.

其他人发布的答案都没有为我工作,因为我的标签栏的视图控制器在它们的根目录下都有导航控制器 - 这是一个常见的层次结构模式UITabBarController.你必须设置导航控制器tabBarItem,而不是拿到冠军,从不同显示navigationItem的标题

您可以直接创建tabBarItem并将它们与VC关联起来.

    let tabBarVCOne = BooksListViewController()
    tabBarVCOne.tabBarItem = UITabBarItem(title: "Books", image: nil, tag: 0)

    tabBarViewControllers.append(tabBarVCOne)
    ...
Run Code Online (Sandbox Code Playgroud)

然后你会有这样的事情:

    //Wrap each view controller in a navigation controller. 
    self.viewControllers = tabBarViewControllers.map(UINavigationController.init)
Run Code Online (Sandbox Code Playgroud)

但是应该将其更改为以下内容,以便tabBarItem从视图控制器中获取已经关联的内容并自动将其设置到导航控制器上.

    self.viewControllers = tabBarViewControllers.map({
        let navigationController = UINavigationController(rootViewController: $0)
        navigationController.tabBarItem = $0.tabBarItem
        return navigationController
    })
Run Code Online (Sandbox Code Playgroud)

您现在可以使用与为您定义的标题分开的不同标题(从VC设置)tabBarItem.