ChatGPT解决这个技术问题 Extra ChatGPT

如何更改独立于标签栏项目标题的uiviewcontroller标题

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

self.title = @"my title";

在此之前,我在情节提要中为其嵌入的视图控制器和导航控制器设置了标题。我将其设置为:“标题”;

当我单击包含视图控制器的选项卡时,选项卡栏项目的标题和 uiviewcontroller 更改为:我的标题

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

我怎样才能做到这一点?


M
MobileMon

听起来您希望更改导航栏中的标题,但不想更改标签栏中的标题。这应该这样做。

[self.navigationItem setTitle:@"my title"];

迅速:

self.navigationItem.title = "My Title"

确保,如果您仍在使用 self.title 设置您的 uitabbar 标题,设置 self.navigation setTitle 否则将无法正常工作
在 swift 4 中的 xcode 9 和 ios 11 中,它显示明确使用标题的错误
使用 Swift 4.2 在 Xcode 10.2 中为我工作,非常感谢!
S
Simon Epskamp

所以对于那些仍然不明白的人(比如我)

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

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

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


C
Community

迅速

设置顶栏标题

self.navigationController?.navigationBar.topItem?.title = "top title"

设置标签项标题

self.tabBarController?.tabBar.items?[0].title = "tab title"

设置两个标题

self.title = "both titles"

topItem 是什么?
这是我可以在配置中设置顶部栏标题的唯一方法,不知道为什么“self.navigationItem.title”对我不起作用。
M
Mohammad Zaid Pathan

对于 Swift 使用这个,

self.navigationItem.title = "Navigation bar title" 
self.title = "Tab bar title"

在 swift 4 (self.navigation.title) 中的 xcode 9 和 ios 11 中显示明确使用标题的错误
P
Pavan

注意:如果您在每个视图控制器的根部都有一个带有导航控制器的标签栏控制器,那么在您设置 navigationItem.title 时,在视图控制器上设置标签栏项目不会影响标题。您需要将 tabBarItem 设置到导航控制器上,而不是从标签栏控制器中获取它。

其他人发布的答案都没有对我有用,因为我的标签栏的视图控制器在其根部都有导航控制器 - 这是 UITabBarController 的常见层次结构模式。您必须设置导航控制器的 tabBarItem 以使标题显示不同于 navigationItem 的标题

您可以像这样创建您的 tabBarItem 并将它们直接关联到您的 VC。

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

    tabBarViewControllers.append(tabBarVCOne)
    ...

然后你会有这样的东西:

    //Wrap each view controller in a navigation controller. 
    self.viewControllers = tabBarViewControllers.map(UINavigationController.init)

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

    self.viewControllers = tabBarViewControllers.map({
        let navigationController = UINavigationController(rootViewController: $0)
        navigationController.tabBarItem = $0.tabBarItem
        return navigationController
    })

您现在可以拥有与为 tabBarItem 定义的标题分开的不同标题(从您的 VC 设置)。


C
Community

斯威夫特 4.2

在这里,我为 UIViewController 创建了一个扩展:

import UIKit

extension UIViewController {

/// Setting the navigation title and tab bar title
///
/// - Parameters:
///   - navigationTitle: Navigation title
///   - tabBarTitle: TabBar title
func setTitles(navigationTitle: String, tabBarTitle: String) {
    // Order is important here!
    title = tabBarTitle
    navigationItem.title = navigationTitle
 }

}

然后从你的控制器:

override func viewDidLoad() {
    super.viewDidLoad()
    setTitles(navigationTitle: "Login", tabBarTitle: "Home")
}

R
Ruiz

这很晚。您可以让您的 TabBarController 充当其自身的 UITabBarControllerDelegate 和 UINavigationControllerDelegate 以及分别嵌入在每个选项卡中的导航控制器。

。H:

@interface YourTabBarController : UITabBarController <UITabBarControllerDelegate, UINavigationControllerDelegate>

@end

米:

- (void) viewDidLoad {
    // UITabBarControllerDelegate
    self.delegate = self;

    // UINavigationControllerDelegates
    yourNavigationController.delegate = self;
    ...
}

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
    yourNavigationController.tabBarItem.title = @"Tab Bar Title";
    ...
}

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    yourNavigationController.tabBarItem.title = @"Tab Bar Title";
    ...
}

根据一些快速测试,这两个委托操作似乎应该涵盖任何松散的情况,并且无论您是在切换选项卡还是在导航控制器中浏览都会更新标题。为了完整起见,您也可以在 didShowViewController 中更新您的标题,但根据我所看到的,我认为没有必要。


w
wolffan

可能有点晚了(但是)。

设置 VC 的标题会更改 Navigation 和 tabBar 的标题。 (如果 VC 已经连接到两者)。

如果你想有单独的标题,你需要手动设置这些,你通常为 VC 设置标题,然后特别是 tabBarItem 的标题,因为它是


B
Burcu Kutluay

设置导航标题是正确的答案,但是当它对我不起作用时,因为我只使用了 tabbarcontroller 和与之相关的控制器。首先,我需要为视图控制器添加导航控制器,然后它才能完美运行。

   override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Navigation bar title"
}

https://i.stack.imgur.com/i1RCb.png