iPhone Objective-C: 如何在使用IB创建的选项卡栏中编程更改选项卡项目的标题?

7

目前,我是在选项卡的根视图的viewDidLoad中设置标题的,这只有在我点击选项卡后才会更改。我希望在选择选项卡之前就设置好它。我尝试了以下代码:

[[self.parentViewController.tabBarController.tabBar.items objectAtIndex:2] title] = @"string";

在另一个标签页中加载第一个视图,但显然出现了问题,因为我收到了左操作数错误。

实现我想要的功能的正确方法是什么?

2个回答

4
[[self.parentViewController.tabBarController.tabBar.items objectAtIndex:2] title] = @"string";

这里的语法略有偏差。你可能想要像这样的东西:

[[self.parentViewController.tabBarController.tabBar.items objectAtIndex:2].title = @"string";

然而,这并不可行,因为没有title属性可以设置。事实上,我看不到任何改变已初始化的UITabBarItem标题的方法。您必须使用UITabBarsetItems:animated:方法一次性设置整个项目组。但这并不好玩。
我敢打赌这将是苹果HIG违规,这就是为什么在当前API中没有简单的方法来执行它的原因。重新思考您的设计,并问自己为什么要更改选项卡的名称,这会使您的用户感到困惑。

谢谢您的回复!我目前正在使用Foursquare API构建一个应用程序,并注意到Foursquare iPhone应用程序中有一个选项卡名称设置为用户的名字,因此我想知道他们是如何做到的。 - Ayaka Nonaka
很可能是在应用程序启动时初始化UITabBar时执行的。 - Shaggy Frog

3
尝试在awakeFromNib中设置标题,而不是viewDidLoad。视图控制器的视图实际上直到需要视图时才加载,而选项卡栏控制器默认情况下不会访问视图控制器的视图,直到您实际选择它(这就是为什么您在选择选项卡时看到标题更改的原因)。
由于nib首先创建视图控制器(假设您已经在IB中构建了选项卡栏控制器),因此在选项卡栏控制器询问标题之前,将立即调用awakeFromNib。

哇,这就像魔法一样奏效了。我甚至不知道awakeFromNib是viewController方法的一个选项。(每天都在学习新东西!)谢谢你!! - Ayaka Nonaka
awakeFromNib是从nib加载的任何对象的选项 - nib加载器在创建的任何对象上查找该方法,并在找到时调用它。请注意,如果您有时从xib创建东西,有时从代码创建东西,则还必须覆盖initWithNibName:方法。 - Kendall Helmstetter Gelner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接