2014-11-13 3 views
1

У меня есть IBAction для 4 кнопок, которые представляют 4 доступных ответа, и каждый раз, когда я нажимаю кнопку, я читаю идентификатор отправителя, затем он выясняет, правильный ли ответ и так далее.Получение двух значений отправителя вместо одного для конкретного случая?

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

Так что сейчас у меня есть:

- (IBAction)answerButtonPressed:(id)sender { 
    NSString* answer= [[sender titleLabel] text]; 

    //checks if answer key is equal to a1 (which is always the correct answer) 
    if([[currentQuestionUsefulVariable valueForKey:@"a1"] isEqualToString:answer]){ 

     correctQuestionsCount1 ++; 
    } 
    //answer is wrong 
    else{ 
     wrongQuestionsCount1 ++; 
    } 
} 

Как вы видите, я хранить строку ответа в переменную с именем ответ

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

EDIT: Ответ на этот вопрос - когда я нажимаю кнопку joker, и это дает пользователю возможность выбрать два из четырех доступных ответов. Вот почему мне нужно это сделать. Для любых других случаев мне нужен только один ответ за раз.

Любые идеи?

ответ

2

Ну вы будете нуждаться в переменной экземпляра, значение которого сохраняется на протяжении всего жизненного цикла объекта, и, возможно, используя изменяемый массив ответов путь вперед:

@interface MyViewController() 
{ 
    NSMutableArray *_correctAnswers; 
} 

Он должен инициализируются в viewDidLoad (другие варианты):

-(void)viewDidLoad { 
    [super viewDidLoad]; 
    _correctAnswers = [NSMutableArray new]; 
} 

, а затем начать собирать правильные ответы на этот массив:

- (IBAction)answerButtonPressed:(id)sender { 
    NSString* answer= [[sender titleLabel] text]; 

    //checks if answer key is equal to a1 (which is always the correct answer) 
    if([[currentQuestionUsefulVariable valueForKey:@"a1"] isEqualToString:answer]){ 
     [_correctAnswers addObject:answer]; 
    } 
    //answer is wrong 
    else{ 
     wrongQuestionsCount1 ++; 
    } 

    if ([_correctAnswers count] == 2) { 
     // Do something? It's not exactly clear what you want to do 
     // when 2 correct answers have been given. 
    } 
} 

Примечание: вы можете сбросить correctQuestionsCount1, так как это будет [_correctAnswers count]. Также вам нужно будет сбросить массив в какой-то момент.

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

+0

Я пробую это прямо сейчас, и я обновлю его через несколько минут. Чтобы все было ясно - у меня есть работающая программа, которая получает один ответ за раз, и все хорошо. Ответ на этот вопрос - когда я нажимаю кнопку joker, и это дает пользователю возможность выбрать два из четырех доступных ответов. Вот почему мне нужно это сделать. Для любых других случаев мне нужен только один ответ за раз. Как я вижу, вы добавляете ответ в массив, после (если ответ правильный, проверка выполнена). Мне нужно заполнить массив двумя ответами, ТОГДА -> проверить, нормально ли один из этих двух. Спасибо за быстрый ответ! – xdevx

+0

Хм, я думаю, что в моем ответе я ошибался. Звучит для меня, как и все, что вы хотите сделать, это включить/отключить некоторые кнопки, чтобы облегчить ответ? – trojanfoe

+0

Я обновил свой комментарий выше. Осталось только до : (если нажата кнопка джокера) -> заполнить массив двумя ответами, ТОГДА -> проверить, нормально ли один из этих двух. Это просто все, что мне нужно. Но мне нужна программа для замораживания, пока нажата кнопка ответа. Я не хочу переходить к другому вопросу, когда нажата только одна.Это уловка. – xdevx