我想使用UITabBarSystemItem作为我的一个tabBarItem的图标,但我正在使用故事板。我不确定在哪里设置它。如果我在视图的viewDidLoad中设置它,那么在按TabBar中的按钮之前它不会改变。在那之前它只是蓝色?广场。
据我所知,你不能在IB检查员中使用UITabBarSystemItems。
更新
首先,我是个白痴。您可以在IB Inspector中完全选择图标。
标签栏项目 - >标识符 - >选择你的图标。
但问题仍然是如何以编程方式进行。或者更确切地说何时/何地?
答案 0 :(得分:11)
使用故事板时,视图控制器使用initWithCoder构造函数初始化,因此您可以覆盖该函数并在其中设置系统项图标
- (id)initWithCoder:(NSCoder*)aDecoder
{
if(self = [super initWithCoder:aDecoder])
{
self.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:1];
}
return self;
}
当然,您可以将系统项的值更改为支持的任何值。 Apple列出了here
答案 1 :(得分:7)
检查此代码是否存在问题:它在我的应用中运行。
- (NSArray *) initializeViewControllers
{
NSArray *viewControllerArray = nil;
viewController1 = <View Init Code>
viewController2 = <View Init Code>
viewController3 = <View Init Code>
1stNavController = [[UINavigationController alloc] initWithRootViewController:viewController1];
UIImage *img = [UIImage imageNamed:@"tab_home"];
[1stNavController .tabBarItem initWithTitle:@"Home" image:img tag:1];
2ndNavController = [[UINavigationController alloc] initWithRootViewController:viewController2];
img = [UIImage imageNamed:@"tab_timeDrop"];
[2ndNavController .tabBarItem initWithTitle:@"Time Entry" image:img tag:2];
3rdNavController = [[UINavigationController alloc] initWithRootViewController:viewController3];
img = [UIImage imageNamed:@"tab_invoiceSummary"];
[3rdNavController.tabBarItem initWithTitle:@"Invoice Summary" image:img tag:3];
viewControllerArray = [NSArray arrayWithObjects:1stNavController,2ndEntryNavController,3rdReportNavController, nil];
return viewControllerArray;
}
此代码返回带有图像的视图控制器,用于各自的选项卡。这里我在tabbar控制器中使用了Navigation Controller。您也可以使用视图控制器而不是导航控制器。
只需添加此代码并在appdidfinishlaunching
方法
tabbarController = [[UITabBarController alloc] init];
_tabbarController.viewControllers = [self initializeViewControllers];
self.window.rootViewController = tabbarController;
希望它有效。
请回复。
答案 2 :(得分:3)
那很简单!
对于where - &gt;创建一个自定义TabBarController(例如WBTabBarController)。 在你的StoryBoard中明确设置它。
如何 - &gt;只需覆盖WBTabBarController的viewDidLoad并为TabBarItems设置图像。在以下示例中,这是使用NIKFontAwesomeIconFactory完成的:
#import "WBTabBarController.h"
#import "NIKFontAwesomeIcon.h"
#import "NIKFontAwesomeIconFactory.h"
#import "NIKFontAwesomeIconFactory+iOS.h"
@interface WBTabBarController ()
@end
@implementation WBTabBarController
- (void)viewDidLoad
{
[super viewDidLoad];
NIKFontAwesomeIconFactory *factory = [NIKFontAwesomeIconFactory tabBarItemIconFactory];
UITabBarItem *item0 = self.tabBar.items[0];
item0.image = [factory createImageForIcon:NIKFontAwesomeIconApple];
UITabBarItem *item1 = self.tabBar.items[1];
item1.image = [factory createImageForIcon:NIKFontAwesomeIconStackOverflow];
}
@end
答案 3 :(得分:2)
假设您的情节提要的初始场景是标签栏视图控制器,您可以在applicationDidFinishLaunching中访问它,它是应用委托rootViewController
的{{1}}。如果条形项已经存在,我不知道你是否可以交换系统项,但你绝对可以设置图像和标题。