標籤:false sdn .net list nsarray obj amp 迴圈 mod
事實上iOS Tabbar的可定製性很高,我們沒有必要反覆造輪子,以下是筆者收集的一些tabbar的經常使用設定。希望對大家有所協助。
設定tabbar選中顏色
iOS7設定例如以下:
[self.tabBarController.tabBarsetSelectedImageTintColor:[UIColor greenColor]];
ios8中例如以下設定:
self.tabBar.tintColor=[UIColor greenColor];
消除tabbar邊框
在appdelegate的程式啟動處:
[[UITabBar appearance] setShadowImage:[[UIImage alloc]init]];
[[UITabBar appearance] setBackgroundImage:[[UIImage alloc]init]];
設定tabbar item原始表徵圖與原始選中表徵圖。而不是系統自己主動填充的顏色
// 拿到 TabBar 在拿到想應的item UITabBar *tabBar = _tabBarController.tabBar; UITabBarItem *item0 = [tabBar.items objectAtIndex:0]; UITabBarItem *item1 = [tabBar.items objectAtIndex:1]; UITabBarItem *item2 = [tabBar.items objectAtIndex:2]; UITabBarItem *item3 = [tabBar.items objectAtIndex:3]; // 對item設定對應地圖片 item0.selectedImage = [[UIImage imageNamed:@"recognize-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];; item0.image = [[UIImage imageNamed:@"recognize"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; item1.selectedImage = [[UIImage imageNamed:@"life-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];; item1.image = [[UIImage imageNamed:@"life"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; item2.selectedImage = [[UIImage imageNamed:@"edit-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];; item2.image = [[UIImage imageNamed:@"edit"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; item3.selectedImage = [[UIImage imageNamed:@"setting-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];; item3.image = [[UIImage imageNamed:@"setting"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
設定tabbar背景圖片
UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, Main_Screen_Width, 49)]; backView.backgroundColor = [UIColor redColor]; [self.tabBar insertSubview:backView atIndex:0]; self.tabBar.opaque = YES;
設定tabbar item選中時的背景圖片
1、5.0以上版本號碼
self.tabBar.selectionIndicatorImage = [UIImage imageNamed:@"system_tabbar_item_selected.png"];
2、5.0下面版本號碼
首先實現例如以下方法:
- (void)setNoHighlistTabBar:(UITabBarController *)tabBarController{ NSArray * tabBarSubviews = [tabBarController.tabBar subviews]; int index4SelView; if(tabBarController.selectedIndex+1 > 4) {//selected the last tab. index4SelView = [tabBarSubviews count]-1; } else if([tabBarController.viewControllers count] > 5) {//have "more" tab. and havn‘t selected the last tab:"more" tab. index4SelView = [tabBarSubviews count] - 5 + tabBarController.selectedIndex; } else {//have no "more" tab. index4SelView = [tabBarSubviews count] - [tabBarController.viewControllers count] + tabBarController.selectedIndex; } if([tabBarSubviews count] < index4SelView+1) { assert(false); return; } UIView * selView = [tabBarSubviews objectAtIndex:index4SelView]; NSArray * selViewSubviews = [selView subviews]; for(UIView * v in selViewSubviews) { if(v && [NSStringFromClass([v class]) isEqualToString:@"UITabBarSelectionIndicatorView"]) {//the v is the highlight view. [self.selectedItemBgImageView removeFromSuperview]; [selView insertSubview:self.selectedItemBgImageView belowSubview:v]; [v removeFromSuperview]; break; } }}
改方法的實質就是迴圈tabBar的subViews, 找到tabBar中的這個view, 是一個UITabBarSelectionIndicatorView的view,然後把它替換成你自己建立的UIImageView, 上例中的self.selectedItemBgImageView.
然後須要把UITabBarController的delegate設為self, 在tabBarController:didSelectViewController的代理方法中運行上面的方法:[self setNoHighlistTabBar:self];
還有setSelectIndex:方法中也要運行[self setNoHighlistTabBar:self];
關於iOS Tabbar的一些設定