как случайное размещение UIButton и значение - PullRequest
0 голосов
/ 15 марта 2012

У меня есть вопрос и я покажу 4 ответа, только 1 верны.

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

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

enter image description here

когда пользователь снова перейдет к этому вопросу, ответ будет в отличающейся кнопке

enter image description here

Мое размещение X, Y, W, H

кнопка 1 5,219,230,45

кнопка 2 5,273,230,45

кнопка 3 244,224,230,45

кнопка 4 244 273 230,45

Ответы [ 8 ]

3 голосов
/ 15 марта 2012

Я реализовал код для того же на моей стороне, и он отлично работает.

-(void)randomAllocation
{
    NSMutableArray* allstring = [[NSMutableArray alloc]initWithObjects:@"Correct",@"Wrong",@"Wrong1",@"Wrong2", nil];

    NSMutableArray* outcomeOFrandom = [[NSMutableArray alloc]init];

    for (int i=0; i<[allstring count]; i++) {
        int temp = 0;

        while (temp==0) {

            int randomInt  =  arc4random()  % 4;


            BOOL result = [outcomeOFrandom containsObject:[allstring objectAtIndex:randomInt]];
            if (result==FALSE ) {

                UIButton* btn = [[UIButton alloc]init];
                [btn setTitle:[allstring objectAtIndex:randomInt] forState:UIControlStateNormal];
                [btn setBackgroundColor:[UIColor blackColor]];

                NSLog(@"tital=%@",[allstring objectAtIndex:randomInt]);

                if (i==0) {
                    [btn setFrame:CGRectMake(5,219,230,45)];
                }
                else if(i==1) 
                    [btn setFrame:CGRectMake(5,273,230,45)];
                }
                else if(i==2) {
                    [btn setFrame:CGRectMake(244,224,230,45)];
                }
                else if(i==3) {
                    [btn setFrame:CGRectMake(244,273,230,45)];
                }

                [outcomeOFrandom addObject:[allstring objectAtIndex:randomInt]];
                [self.view addSubview:btn];
                [btn release];

                temp=1;
                break;
            }

        }

    }

}
2 голосов
/ 15 марта 2012

Мне довелось работать над похожим игровым приложением, поэтому я получил код, который определенно поможет.Проверьте это ниже.Обратите внимание, что я сказал, что для правильного и неправильного нажатия кнопки вы должны вызывать «correctAnswerMethod» и «falseAnswerMethod».

// Define the four buttons in their respective frames, create the first button as the correct one, we'll shuffle it later.
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button1 setTitle:@"Correct Answer" forState:UIControlStateNormal];
[button1 addTarget:self action:@selector(correctAnswerMethod:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button1];

UIButton *button2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button2 setTitle:@"Wrong Answer 1" forState:UIControlStateNormal];
[button2 addTarget:self action:@selector(wrongAnswerMethod:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button2];

UIButton *button3 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button3 setTitle:@"Wrong Answer 2" forState:UIControlStateNormal];
[button3 addTarget:self action:@selector(wrongAnswerMethod:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button3];

UIButton *button4 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button4 setTitle:@"Wrong Answer 3" forState:UIControlStateNormal];
[button4 addTarget:self action:@selector(wrongAnswerMethod:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button4];


//Create an array with the rectangles used for the frames
NSMutableArray *indexArray = [NSMutableArray arrayWithObjects:
                              [NSValue valueWithCGRect:CGRectMake(5, 219, 230, 45)], 
                              [NSValue valueWithCGRect:CGRectMake(5, 273, 230, 45)], 
                              [NSValue valueWithCGRect:CGRectMake(244, 219, 230, 45)], 
                              [NSValue valueWithCGRect:CGRectMake(244, 273, 230, 45)], nil];

//Randomize the array
NSUInteger count = [indexArray count];
for (NSUInteger i = 0; i < count; ++i) {
    int nElements = count - i;
    int n = (arc4random() % nElements) + i;
    [indexArray exchangeObjectAtIndex:i withObjectAtIndex:n];
}

//Assign the frames
button1.frame = [((NSValue *)[indexArray objectAtIndex:0]) CGRectValue];
button2.frame = [((NSValue *)[indexArray objectAtIndex:1]) CGRectValue];
button3.frame = [((NSValue *)[indexArray objectAtIndex:2]) CGRectValue];
button4.frame = [((NSValue *)[indexArray objectAtIndex:3]) CGRectValue];
1 голос
/ 15 марта 2012

Я не думаю, что вам нужно установить х и у вашей кнопки здесь.просто установите тег ваших кнопок, скажем, тег 1 - 4, сгенерируйте случайное число 1 - 4 (возможный тег ваших кнопок), сохраните свои кнопки в NSArray и выполните цикл, подобный:

NSArray *buttonsArr = [[NSArray alloc]initWithObjects:button1,button2, button3, button4, nil];
int randomInt = (arc4random() % 4) + 1;
for (int i = 0; i < [buttonsArr count]; i++) {
    if ([(UIButton*)[buttonsArr objectAtIndex:i] tag] == randomInt) {
        [[buttonsArr objectAtIndex:i] setTitle:@"correct" forState:UIControlStateNormal];
    }else{
        [[buttonsArr objectAtIndex:i] setTitle:@"wrong" forState:UIControlStateNormal];
    }
}
1 голос
/ 15 марта 2012

Вы должны создать кнопку и добавить их как subView.Когда вам нужно поместить кнопку в случайном месте, вы можете использовать:

[button1 setFrame:CGRectMake(5,219,230,45)];
[button2 setFrame:CGRectMake(5,273,230,45)];
[button3 setFrame:CGRectMake(244,224,230,45)];
[button4 setFrame:CGRectMake(244,273,230,45 )];
1 голос
/ 15 марта 2012

Из 4-х вариантов только один верный, поэтому, почему вы беспокоитесь, просто присвойте метку своей UIButton.В событии touchUpInside или любом указанном вами действии.Просто сопоставьте правильный тег ответа с тегом кнопки, которого пользователь коснулся.

Вы должны установить некоторую логику для случайного задания ответа с другим тегом кнопки.

1 голос
/ 15 марта 2012

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

1 голос
/ 15 марта 2012

Вы можете всегда создавать кнопки в одном и том же положении и рандомизировать метки на кнопке. Если вы используете массив для предоставления меток, таких как val1, val2, val3 и т. Д., Вы можете рандомизировать массив.

0 голосов
/ 15 марта 2012

создайте свой собственный класс с этими 4 кнопками. В этом классе вы можете хранить позиции ваших кнопок. затем вы можете добавить функцию-член (что-то вроде следующего), которая будет их рисовать:

-(void)drawButtonsWithIncorrectAtIndex:(int)index
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...