изображение элемента tabbar и selectedImage - PullRequest
1 голос
/ 20 января 2012

У меня есть контроллер панели вкладок (это приложение, основанное на панели вкладок, поэтому панель вкладок находится на MainWindow.xib).В этом xib я добавил 4 элемента панели вкладок и установил изображение всех элементов панели вкладок.В связи с этим я сталкиваюсь с двумя проблемами:

1) Изображение белого цвета, но когда я запускаю приложение, оно отображает все изображения на панели вкладок серым цветом.Как сделать так, чтобы оно выглядело так же, как на исходном изображении.

2) У меня есть выбранное изображение, которое я хочу добавить на панель вкладок, которая в данный момент выбрана.Как мне это сделать ???

ОБНОВЛЕНО ПОСЛЕ КОДА НИКА:

Эй, в iOS 5 вам нужно будет написать следующий код в вашем делегате приложения для настройки элемента панели вкладок, выбранного и не выбранногоimage (решение категории будет работать только на 4):

if ([[[UIDevice currentDevice] systemVersion] floatValue]>4.9) {
    NSString *selectedImageName,*unselectedImageName;

    for (int counter = 0; counter < [self.tabBarController.tabBar.items count]; counter++) {
        if (counter==0) {
            selectedImageName = <someImagename>;
            unselectedImageName = <someImagename>;
        }
        else if (counter==1) {
            selectedImageName = <someImagename>;
            unselectedImageName = <someImagename>;
        }
        .
                    .
        else {
            selectedImageName = <someImagename>;
            unselectedImageName = <someImagename>;
        }
        UIImage *selectedImage = [UIImage imageNamed:selectedImageName];
        UIImage *unselectedImage = [UIImage imageNamed:unselectedImageName];

        UITabBarItem *item = [self.tabBarController.tabBar.items objectAtIndex:counter];
        if ([item respondsToSelector:@selector(setFinishedSelectedImage:withFinishedUnselectedImage:)]) {
            [item setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];
        }
    }
}

Ответы [ 2 ]

6 голосов
/ 20 января 2012

Добавьте эту категорию в свой проект. Это заставит элементы панели вкладок использовать исходное изображение в качестве отключенного состояния вместо применения к ним серого градиента:

@implementation UItabBarItem (CustomUnselectedImage)

- (UIImage *)unselectedImage
{
    return self.image;
}

@end

Может показаться, что он использует частные API, но я видел, что он использовался несколько раз в утвержденных приложениях. На самом деле это не вызов частного метода, просто переопределение одного.

Если вам нужно указать разные изображения для выбранного и невыбранного изображения, лучше всего использовать свойство tag UITabBarItem и оператор switch, например:

@implementation UItabBarItem (Custom)

- (UIImage *)selectedImage
{
    switch (self.tag)
    {
        case 1:
            return [UIImage imageNamed:@"tab-selected1.png"];
        case 2:
            return [UIImage imageNamed:@"tab-selected2.png"];
        etc...
    }
}

- (UIImage *)unselectedImage
{
    switch (self.tag)
    {
        case 1:
            return [UIImage imageNamed:@"tab-unselected1.png"];
        case 2:
            return [UIImage imageNamed:@"tab-unselected2.png"];
        etc...
    }
}

@end

Тогда в конструкторе интерфейсов не беспокойтесь о настройке изображений элементов панели вкладок, так как они будут просто игнорироваться. Вместо этого установите их теги так, чтобы они соответствовали изображениям, которые вы указали в выражениях switch.

Обратите внимание, что если в вашем приложении несколько панелей вкладок, и вы не хотите, чтобы все они были переопределены таким образом, вы можете определить эти методы в подклассе UITabBarItem, а не в качестве категории. Затем вы можете установить класс элементов панели вкладок в вашем nib-файле в качестве своего пользовательского подкласса вместо обычных UITabBarItems, и это затронет только те из них.

EDIT:

Обратите внимание, что в iOS 5 есть лучший способ сделать это с помощью API UIAppearance. Эта техника все еще должна работать, но кто знает, может ли Apple начать бороться с ней сейчас, когда есть официально поддерживаемый подход. Лучше использовать новый метод, если вам действительно не нужна поддержка iOS 4.

1 голос
/ 30 апреля 2012

На основании http://blog.theanalogguy.be/ у меня работает.Добавьте категорию UItabBarItem (CustomUnselectedImage) - не имеет эффекта = (

* .h

@interface CustomTabBarItem : UITabBarItem {  
    UIImage *customHighlightedImage;  
    UIImage *customNormalImage;  
}  

@property (nonatomic, retain) UIImage *customHighlightedImage;  
@property (nonatomic, retain) UIImage *customNormalImage;  

- (id)initWithTitle:(NSString *)title 
        normalImage:(UIImage *)normalImage 
    highlightedImage:(UIImage *)highlightedImage 
                tag:(NSInteger)tag;
@end

и * .m

#import "CustomTabBarItem.h"

@implementation CustomTabBarItem  

@synthesize customHighlightedImage;  
@synthesize customNormalImage;  

- (id)initWithTitle:(NSString *)title 
        normalImage:(UIImage *)normalImage 
    highlightedImage:(UIImage *)highlightedImage 
                tag:(NSInteger)tag{

    [self initWithTitle:title
                    image:nil
                    tag:tag];
    [self setCustomNormalImage:normalImage];
    [self setCustomHighlightedImage:highlightedImage];
    return self;
}

- (void) dealloc  
{  
    [customHighlightedImage release];
    customHighlightedImage=nil;  
    [customNormalImage release]; 
    customNormalImage=nil;  
    [super dealloc];  
}  

-(UIImage *) selectedImage  
{  
    return self.customHighlightedImage;  
}  

-(UIImage *) unselectedImage  
{  
    return self.customNormalImage;  
}  

@end  

happy coding =]-

...