Назначить UIImages для UIButtons через массив - PullRequest
0 голосов
/ 13 сентября 2011

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

Я попробовал это, но не удалось

int index = arc4random() % 10;

UIImage *img = [UIImage imageNamed:[arrayAnsewrImages objectAtIndex:index]];

[self.btnAnswerImage1 setBackgroundImage:[UIImage imageNamed:img] forState:UIControlStateNormal];

вот код метода, м с использованием:

[self.arrayQuestionImages addObject:@"bear.jpg"];
[self.arrayQuestionImages addObject:@"girraf.jpg"];
[self.arrayQuestionImages addObject:@"hippo.jpg"];
[self.arrayQuestionImages addObject:@"monkey.jpg"];
[self.arrayQuestionImages addObject:@"piglet.jpg"];
[self.arrayQuestionImages addObject:@"pumba.jpg"];
[self.arrayQuestionImages addObject:@"rabbit.jpg"];
[self.arrayQuestionImages addObject:@"simba.jpg"];
[self.arrayQuestionImages addObject:@"snake.jpg"];
[self.arrayQuestionImages addObject:@"tigger.jpg"];
[self.arrayQuestionImages addObject:@"turtle.jpg"];
int index = arc4random() % 10;

UIImage *img = [UIImage imageNamed:[arrayQuestionImages objectAtIndex:index]];


switch (index)
{   

    case 0:
    {   
        //[self.btnQuestionImage1 setBackgroundImage:[UIImage imageNamed:img] forState:UIControlStateNormal];
        [self.btnAnswerImage1 setImage:img forState:UIControlStateNormal];

    }
        break;
    case 1:
    {
        [self.btnQuestionImage2 setImage:img forState:UIControlStateNormal];    
    }               
        break;
    case 2:
    {
        [self.btnQuestionImage3 setImage:img forState:UIControlStateNormal];    

    }   
        break;
    case 3:
    {
        [self.btnQuestionImage4 setImage:img forState:UIControlStateNormal];

    }
        break;
    case 4:
    {
        [self.btnQuestionImage5 setImage:img forState:UIControlStateNormal];    

    }   
        break;  
    case 5:
    {
        [self.btnQuestionImage6 setImage:img forState:UIControlStateNormal];    

    }   
        break;  
    case 6:
    {
        [self.btnQuestionImage7 setImage:img forState:UIControlStateNormal];    

    }   
        break;  
    case 7:
    {
        [self.btnQuestionImage8 setImage:img forState:UIControlStateNormal];

    }   
        break;  
    case 8:
    {
        [self.btnQuestionImage9 setImage:img forState:UIControlStateNormal];    

    }   
        break;  
    case 9:
    {
        [self.btnQuestionImage10 setImage:img forState:UIControlStateNormal];   

    }   
        break;  



    default:
    {
        [self.btnQuestionImage1 setImage:img forState:UIControlStateNormal];

    }
        break;
} 
}

M Получение пустого / нулевого изображения на каждой моей кнопке. Пожалуйста, предложите мне любой вариант.

Ответы [ 3 ]

0 голосов
/ 13 сентября 2011

Вам необходимо поместить имена изображений в массив.

вы пытаетесь передать объект uiimage в конструктор imagedNamed

0 голосов
/ 13 сентября 2011

Ничто не кажется мне таким странным в вашем коде, но есть пара небольших вещей, которые я бы проверил ...

Ваш вызов [UIImage imageNamed:] должен принимать строку в качестве параметра, но он появляется (по крайней мере, по имени вашего массива), который вы передаете в объект UIImage. Код должен быть одним из следующих:

UIImage *img = [UIImage imageNamed:[arrayAnswerImageNames objectAtIndex:index]];  // Note "Names" array

или

UIImage *img = (UIImage *)[arrayAnswerImages objectAtIndex:index];

в зависимости от того, как вы хотите построить свой массив изображений; с изображениями, или imageNames. Также я предполагаю, что рамки ваших кнопок установлены, и что они добавляются в вид?

Надеюсь, вы все разберетесь.


EDIT

Только что посмотрел ваш дополнительный код. Просто мысль - вы инициализировали свой массив arrayQuestionImages? Убедитесь, что вы называете что-то похожее на:

self.arrayQuestionImages = [NSMutableArray arrayWithCapacity:10];

до добавления объектов.

Кроме того, использование оператора switch, как показано выше, выглядит немного запутанным. Лично я бы сделал что-то вроде следующего:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.questionImageNames = [NSArray arrayWithObjects:@"bear.jpg", @"girraf.jpg", @"hippo.jpg", @"monkey.jpg", @"piglet.jpg", @"pumba.jpg", @"rabbit.jpg", @"simba.jpg", @"snake.jpg", @"tigger.jpg", @"turtle.jpg", nil];


    NSMutableArray *buttonArray = [NSMutableArray arrayWithCapacity:10];

    for (int i = 0; i < NUM_BUTTONS; i++) {
        NSUInteger index = arc4random() % NUM_BUTTONS;

        UIButton *newButton = [UIButton buttonWithType:UIButtonTypeCustom];
        newButton.frame = CGRectMake(i * x, i * y, width, height);    // Whatever position and size you need...

        UIImage *buttonImage = [UIImage imageNamed:[self.questionImageNames objectAtIndex:index]];
        [newButton setBackgroundImage:buttonImage forState:UIControlStateNormal];

        [self.view addSubview:newButton];
        [buttonArray addObject:newButton];
    }

    self.myButtons = buttonArray;   // Where myButtons is a NSArray property of your class, to store references to the buttons.
}
0 голосов
/ 13 сентября 2011

UIImage * img = [UIImage imageNamed: [arrayAnswerImageNames objectAtIndex: index]]; [self.btnAnswerImage1 setBackgroundImage: img forState: UIControlStateNormal];

...