как установить изображение для uitabbarcontroller в коде какао - PullRequest
6 голосов
/ 11 июня 2009

Привет, я создаю контроллер панели вкладок в XCode, а не в конструкторе интерфейсов. заголовки представлений на вкладках устанавливают заголовки на вкладках, но я не уверен, как устанавливать изображения.

Кто-нибудь может помочь?

Ответы [ 4 ]

20 голосов
/ 16 июня 2009

Я понял, что вы можете получить массив контроллеров представления и затем добавить изображения:

           NSArray *tabs =  tabBarController.viewControllers;
UIViewController *tab1 = [tabs objectAtIndex:0];
tab1.tabBarItem.image = [UIImage imageNamed:@"clockicon.png"];
UIViewController *tab2 = [tabs objectAtIndex:1];
tab2.tabBarItem.image = [UIImage imageNamed:@"nearest.png"];
11 голосов
/ 11 июня 2009

UIViewController имеет свойство tabBarItem , которое имеет свойство image (унаследованное от UIBarItem class UITabBarItem подклассы). Например:

viewController.tabBarItem.image = [UIImage imageNamed:@"foo.png"];
2 голосов
/ 05 февраля 2011

UITabBarController не допускает много черт, таких как красочные изображения для элементов панели вкладок, шрифты для элементов панели, а также фоновое изображение для панели вкладок. я нашел способ обойти когда один UITabBarController добавляется к UITabBarController (не делегату приложения) через xib, для UITabBarController также существует файл UIView (с именем view). добавьте виды изображений вместе с изображениями для панели вкладок, а также для элементов панели вкладок, ярлыков и всего, что вы хотите, чтобы они попадали прямо под рамку панели вкладок. теперь мы должны сделать вкладку невидимой, но все еще работоспособной. уменьшите альфа-значение для панели вкладок UITabBarController с xib tp 0,02 (ниже 0,01 панель вкладок не улавливает сенсорные действия). вы сделали! даже когда все это делается программно ... это очень тривиально ... это обходное путешествие избегает политики Apple, согласно которой разработчики не могут создавать подклассы UITabBarController. так что ... ура :) 1008 *

1 голос
/ 05 августа 2011

Я быстро написал следующий класс, и показ / скрытие вкладок в UITabBarController работало как по волшебству:

TabBarDesigner.h

#import <Foundation/Foundation.h>
@interface TabBarDesigner : NSObject 
{

}

+(void) setTabBarController:(UITabBarController *)tabBarController
                      items:(NSArray *)tabBarItems 
            viewControllers:(NSArray *)viewControllers;

+(void) removeItemsInRange:(NSRange) range;

@end

TabBarDesigner.m

#import "TabBarDesigner.h"

static NSArray *_tabBarItems = NULL;
static NSArray *_viewControllers = NULL;
static UITabBarController *_tabBarController = NULL;

@implementation TabBarDesigner

+(void) setTabBarController:(UITabBarController *)tabBarController
                      items:(NSArray *)tabBarItems 
            viewControllers:(NSArray *)viewControllers
{
    if (tabBarItems && viewControllers && tabBarController)
    {
        if ([tabBarItems count] == [viewControllers count])
        {
            [_tabBarItems release];
            [_viewControllers release];
            _tabBarItems = [tabBarItems copy];
            _viewControllers = [viewControllers copy];
            _tabBarController = tabBarController;
        }
    }
}

+(void) removeItemsInRange:(NSRange) range
{
    if (_tabBarController)
    {
        if ( range.location < ([_tabBarItems count] - 1) )
        {
            if ( (range.length + range.location) < [_tabBarItems count] )
            {
                NSMutableArray *tabBarItems = [_tabBarItems mutableCopy];   
                [tabBarItems removeObjectsInRange:range];
                NSMutableArray *viewControllers = [_viewControllers mutableCopy];
                [viewControllers removeObjectsInRange:range];
                [_tabBarController setViewControllers:viewControllers];
                 NSUInteger i;
                for (i = 0; i< [viewControllers count]; i++) 
                {
                    UIViewController *vC = [viewControllers objectAtIndex:i];
                    vC.tabBarItem.image = [[tabBarItems objectAtIndex:i] image];
                    vC.tabBarItem.title = [[tabBarItems objectAtIndex:i] title];
                    vC.tabBarItem.tag = [[tabBarItems objectAtIndex:i] tag];
                }

                [tabBarItems release];
                [viewControllers release];

            }


        }
    }
}


@end

Пример использования этого класса: В вашем MyAppDelegate.m

#import "TabBarDesigner.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [TabBarDesigner setTabBarController:_tabBarController
                                  items:[_tabBarController.tabBar items] 
                        viewControllers:[_tabBarController viewControllers]];
    // remove the first 3 tabs
    [TabBarDesigner removeItemsInRange:NSMakeRange(0,3)];
    // show all tabs
    [TabBarDesigner removeItemsInRange:NSMakeRange(0,0)];
    // continue with your code
}

Ура!

...