我使用的是自定义标签栏图片,中间标签也是自定义图片(很像旧版本的Instagram)。
以下是我的一些代码:
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UITabBar *tabBar = tabBarController.tabBar;
[tabBar setBackgroundImage:[UIImage imageNamed:@"CustomTabBar.png"]];
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
tabBarItem3.title = nil;
tabBarItem3.image = nil;
[tabBarItem3 setFinishedSelectedImage:[UIImage imageNamed:@"tab-button-selected.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"tab-button.png"]];
这很好用,但我有一个问题我无法解决。默认情况下,所选选项卡具有浅灰色背景。这是我想要保留的效果,但不适用于中间选项卡。中间选项卡是一个较大的圆形图像,在选中时会发生变化,但仍然会出现灰色背景。
有没有办法像[tabBar setSelectionIndicatorImage:[[UIImage alloc] init]];
那样删除它,但仅限于该标签。或者,在app delegate中,检测选项卡中的更改并将其删除?
答案 0 :(得分:6)
好的,所以事实证明一个不错的午餐时间步行真的有助于这些情况。对于遇到类似问题的其他人来说,这是我的答案。
我首先在我的应用代表的.h中加入<UITabBarControllerDelegate>
。在didFinishLaunchingWithOptions
方法中,我设置了标签栏的代理:
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.delegate = self;
然后我可以使用此方法切换是否显示背景图像:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
UITabBar *tabBar = tabBarController.tabBar;
if (tabBar.selectedItem == [tabBar.items objectAtIndex:2]) {
[tabBar setSelectionIndicatorImage:[[UIImage alloc] init]];
}
else {
[tabBar setSelectionIndicatorImage:nil];
}
}
答案 1 :(得分:0)
我已尝试在我的代码中实现此功能。但是我在故事板中创建了原始标签栏,当我在我的app委托中添加标签栏时,它似乎没有被覆盖。我想知道我该怎么做呢?
我可以覆盖标签栏项目,如此
//create new tab bar appearance
UITabBar *tabBar = [UITabBar appearance];
//set background image
[tabBar setBackgroundImage:[UIImage imageNamed:@"menu.png"]];
//create a colour and apply it as tint colour when items aren't selected.
UIColor *color=[UIColor colorWithRed:64.0/255.0 green:147.0/255.0 blue:52.0/255.0 alpha:255.0];
UIColor *colorSelected=[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
[tabBar setTintColor:color];
[tabBar setSelectedImageTintColor:colorSelected];
[tabBar setSelectionIndicatorImage:[UIImage imageNamed:@"selection-tab.png"]];
所有这一切都在didfinishloadingwithoptions
中