我不是母语为英语的人,所以如果我的解释不够清楚,请告诉我,我会尝试重新修饰它们。
由于我的帖子太长,可能看起来很可怕,也很复杂,但实际上并非如此,只是因为我认为最好还是解释如何去做,而不仅仅是给出几行码。
你可以使用UITabBarController
属性来实现你想要的。
UITabBarController
有一个属性tabBar
,这是实际的UITabBar
。
有人可能会认为,为了实现你想要的,你应该编辑这个属性,
然而,编辑这个属性会导致一个异常。
从苹果公司的UITabBarController
文档,关于tabBar
属性:
You should never attempt to manipulate the UITabBar object itself stored in
this property. If you attempt to do so, the tab bar view throws an exception.
所以,你不应该试图在运行时编辑此属性。
警告这个词的,这里是你应该做 - 什么
UITabBarController
也有一个名为viewControllers
属性,它是一个NSArray
谁拥有参考该由标签栏显示的视图控制器。
该属性可以在运行时修改,并且应用于其的更改在选项卡栏中立即更新。
但是,对于您的情况,您无需修改此属性,
但我认为您应该知道,因此如果在某些情况下需要添加或删除标签栏中的某些项目,您会知道那可以做到。
你想要做的是遍历该数组的对象来访问视图控制器本身。
UIViewController
有一个名为tabBarItem
的属性,它代表视图控制器的UITabBarItem
。
所以我们基本上做的是获取视图控制器的标签栏项目,但不是从UITabBarController
本身获取它,而是直接从每个视图控制器获取它。
每个UITabBarItem
有一个title
财产,这是你想改变。
所以现在,在那么长的介绍之后,我们来看实际的代码。
我觉得一个很简单的方法来实现你想要的是迭代通过viewControllers
数组,并有一些switch语句在那里,将改变标题。
与任何编程情况一样,这可以通过无数其他方式完成,因此您可能有更好的方式来实现它,而不是下面的示例,但这应该可以做到。
正被显示在选项卡栏控制器每个视图控制器,具有使用属性tabBarController
所以可以在任意正被显示在选项卡栏视图控制器的运行此代码到该标签条的引用,并只需使用self.reference
即可获得对其的引用。
添加的语言后,这个地方有更改─
for (int i = 0; i < [self.tabBarController.viewControllers count]; i++) {
if([self.tabBarController.viewControllers[i] isKindOfClass: [UIViewController class]]) {
UIViewController *vc = self.tabBarController.viewControllers[i];
switch(i) {
case 0:
vc.tabBarItem.title = @"primero";
break;
case 1:
vc.tabBarItem.title = @"secondo";
break;
}
}
}
我们基本上做的,正在运行for
循环,迭代通阵列中所有的项目,
数组中的项目按照它们出现在标签栏
的顺序,然后我们使用switch语句在相应的位置更改视图控制器的标题
由于数组的索引为0,第一个视图控制器位于位置i = 0,最后一个小于0 f数组中的项目。
有人可能会说我的if
是不必要的,
既然我们已经知道,这个数组只保存视图控制器,没有必要检查是否该位置的产品UIViewController
类,或者它的子类。
他们可能是对的,但我总是说最好是安全而不是抱歉。
诅咒我还会在你的代码中包含一些东西来实际检查用户选择的语言。
上面的示例将标题更改为西班牙语,而不管用户的选择如何。
希望它能帮助队友,
好运
感谢您详细的解答!没问题看它:)我检查它,但我认为,这将解决我的问题:)非常感谢你! – emha 2014-11-01 12:19:04