ans*_*hul 1 iphone uitabbarcontroller uitabbaritem ios
我有一个标签栏控制器(它是一个基于标签栏的应用程序,因此标签栏位于MainWindow.xib上).在这个xib中,我添加了4个标签栏项目,并设置了所有标签栏项目的图像.因此,我面临两个问题:
1)图像是白色的,但是当我运行应用程序时,它显示标签栏项目上的所有图像为灰色.如何使其看起来与原始图像中的相同.
2)我有一个选定的图像,我想在当前选中的标签栏项目上添加.我该怎么办?
尼克代码后更新:
嘿,在iOS 5中,你必须在你的app委托中编写以下代码,用于设置选中和未选中的标签栏项目(类别解决方案仅适用于4):
if ([[[UIDevice currentDevice] systemVersion] floatValue]>4.9) {
NSString *selectedImageName,*unselectedImageName;
for (int counter = 0; counter < [self.tabBarController.tabBar.items count]; counter++) {
if (counter==0) {
selectedImageName = <someImagename>;
unselectedImageName = <someImagename>;
}
else if (counter==1) {
selectedImageName = <someImagename>;
unselectedImageName = <someImagename>;
}
.
.
else {
selectedImageName = <someImagename>;
unselectedImageName = <someImagename>;
}
UIImage *selectedImage = [UIImage imageNamed:selectedImageName];
UIImage *unselectedImage = [UIImage imageNamed:unselectedImageName];
UITabBarItem *item = [self.tabBarController.tabBar.items objectAtIndex:counter];
if ([item respondsToSelector:@selector(setFinishedSelectedImage:withFinishedUnselectedImage:)]) {
[item setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];
}
}
}
Run Code Online (Sandbox Code Playgroud)
将此类别添加到项目中.它将强制标签栏项目将原始图像用作禁用状态,而不是对它们应用灰色渐变:
@implementation UItabBarItem (CustomUnselectedImage)
- (UIImage *)unselectedImage
{
return self.image;
}
@end
Run Code Online (Sandbox Code Playgroud)
这似乎是使用私有API,但我已经看到这在已批准的应用程序上多次使用.它实际上并没有调用私有方法,只是覆盖了一个方法.
如果您需要为选定和未选择的图像指定不同的图像,最好的办法是使用UITabBarItem的tag属性和switch语句,如下所示:
@implementation UItabBarItem (Custom)
- (UIImage *)selectedImage
{
switch (self.tag)
{
case 1:
return [UIImage imageNamed:@"tab-selected1.png"];
case 2:
return [UIImage imageNamed:@"tab-selected2.png"];
etc...
}
}
- (UIImage *)unselectedImage
{
switch (self.tag)
{
case 1:
return [UIImage imageNamed:@"tab-unselected1.png"];
case 2:
return [UIImage imageNamed:@"tab-unselected2.png"];
etc...
}
}
@end
Run Code Online (Sandbox Code Playgroud)
然后在界面构建器中,不要打扰设置标签栏项目图像,因为它们只是被忽略.而是将其标记设置为与您在switch语句中指定的图像相匹配.
请注意,如果应用程序中有多个选项卡栏,并且您不希望以这种方式覆盖它们,则可以在UITabBarItem的子类而不是类别上定义这些方法.然后,您可以将nib文件中的选项卡栏项设置为自定义子类而不是常规UITabBarItems,只有那些会受影响.
编辑:
请注意,从iOS 5开始,使用UIAppearance API有更好的方法.这种技术应该仍然有效,但谁知道Apple现在是否可以开始打击它,因为有一种官方支持的方法.除非你真的需要iOS 4支持,否则最好使用新方法.
| 归档时间: |
|
| 查看次数: |
13995 次 |
| 最近记录: |