用StoryBoards以编程方式设置UITabBarItem图标?

Wil*_*che 4 iphone xcode ios5

我想使用UITabBarSystemItem作为我的一个tabBarItem的图标,但我正在使用故事板.我不确定在哪里设置它.如果我在视图的viewDidLoad中设置它,那么在按TabBar中的按钮之前它不会改变.在那之前它只是蓝色?广场.

据我所知,你不能在IB检查器中使用UITabBarSystemItems.

更新:

首先,我是个白痴.您可以在IB Inspector中完全选择图标.

标签栏项目 - >标识符 - >选择您的图标.

但问题仍然是如何以编程方式进行.或者更确切地说何时/何地

Joh*_*n F 11

使用故事板时,视图控制器使用initWithCoder构造函数初始化,因此您可以覆盖该函数并在其中设置系统项图标,如此

- (id)initWithCoder:(NSCoder*)aDecoder 
{
    if(self = [super initWithCoder:aDecoder]) 
    {
        self.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:1];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

当然,您可以将系统项的值更改为支持的任何值.Apple 在这里列出了它们


iCr*_*ive 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;
}
Run Code Online (Sandbox Code Playgroud)

此代码返回带有图像的视图控制器,用于各自的选项卡.这里我在tabbar控制器中使用了Navigation Controller.您也可以使用视图控制器而不是导航控制器.

只需添加此代码并按如下appdidfinishlaunching方法初始化tabbar控制器:

 tabbarController = [[UITabBarController alloc] init];

_tabbarController.viewControllers = [self initializeViewControllers];

self.window.rootViewController = tabbarController;
Run Code Online (Sandbox Code Playgroud)

希望它有效.

请回复.