Невозможно установить фоновое изображение для панели вкладок - PullRequest
0 голосов
/ 25 января 2012

У меня проблемы с настройкой фонового изображения на моей вкладке.Я обновился до iOS5 и Xcode 4.2, и фоновое изображение панели вкладок просто перестало работать.

Панель вкладок присутствует только в моем RootViewController.

Мне удалось использовать Interface Builder и применилцвет фона, который не совсем то, что я хотел, но сделаю пока.Это работает только для iOS5 по некоторым причинам.В идеале я хотел бы сделать это программно.Я пытаюсь заставить работать следующий код:

RootViewController.h

@interface RootViewController : UIViewController {

    IBOutlet UITabBar *mainTabBar;
    IBOutlet UITabBarItem *settingsBarItem;
    IBOutlet UITabBarItem *infoBarItem;
    IBOutlet UITabBarItem *aboutBarItem;

}

@property (retain,nonatomic) UITabBar *mainTabBar;

@end

RootViewController.m

-(void)viewDidLoad {

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"smallMenuBackground.png"]]; 
        if ([mainTabBar respondsToSelect:@selector(setBackgroundImage:)]){
            mainTabBar.backgroundImage = imageView;
        }
        else{
            CGRect frame = CGRectMake(0, 0, 480, 49);
            UIView *v = [[UIView alloc] initWithFrame:frame];
            UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
            UIColor *c = [[UIColor alloc] initWithPatternImage:i];
            v.backgroundColor = c;
            [c release];
            [mainTabBar insertSubview:v atIndex:0]; 
            [v release];
        }
}

Этот код просто не работает для меня,Я, должно быть, что-то делаю не так, поэтому любая помощь приветствуется.

Я также получаю пару предупреждений:

1) Метод экземпляра -respondToSelect: не найден (возвращаемый тип по умолчанию)to 'id')

2) Несовместимые типы указателей, присваиваемые UIImage * из UIImageView *

EDIT

Весь код слишком велик для вставки здесьRootViewController.h равен http://pastie.org/3249124, а RootViewController.m равен http://pastie.org/3249137

Ответы [ 2 ]

2 голосов
/ 25 января 2012

эта строка, не должно ли это быть

if ([mainTabBar respondsToSelector:@selector(setBackgroundImage:)])

respondsToSelector: не respondsToSelect:

также, как было сказано,

mainTabBar.backgroundImage = imageView;

должно быть

mainTabBar.backgroundImage = [UIImage imageNamed:@"smallMenuBackground.png"];

, поскольку backgroundImage равно UIImage, а ваш imageView равен UIImageView

Редактировать

также, я считаю, что код воператор else довольно странный, попробуйте, если это работает.

else
{
    UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
    UIImageView* imageView = [UIImageView alloc] initWithImage:i];
    [mainTabBar insertSubview:imageView atIndex:0]; 
    [imageView release];
}

EDIT 2:

    if ([mainTabBar respondsToSelect:@selector(setTintColor:)])
    {
        UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
        UIColor* c = [[UIColor alloc] initWithPatternImage:i];
        mainTabBar.tintColor = c;
    }
    else
    {
        CGRect frame = CGRectMake(0, 0, 480, 49);
        UIView *v = [[UIView alloc] initWithFrame:frame];
        UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
        UIColor *c = [[UIColor alloc] initWithPatternImage:i];
        v.backgroundColor = c;
        [c release];
        [mainTabBar insertSubview:v atIndex:0]; 
        [v release];
    }
1 голос
/ 25 января 2012

у вас есть небольшая проблема, вы передаете imageview в mainTabBar.backgroundImage, это будет работать, вы передадите UIImage ... пожалуйста, проверьте этот код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...