Переключение оператора с использованием selectedSegmentIndex - PullRequest
0 голосов
/ 03 ноября 2010

Как это сделать для всех,

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

В моем приложении есть UIView, содержащийсписок вопросов и UISegmentedControl под названием «question_btn» для каждого вопроса.UISegmentedControl имеет 2 сегмента, первый для ответа «НЕТ», второй для ответа «ДА», соответствующий каждому вопросу.

Каждый «question_btn» индивидуально вызывает - (void) processQuestions {}, но когда я нажимаю накаждый "question_btn" только последний обрабатывается правильно.Все предыдущие «question_btns» вызывают метод processQuestions, но не реализуют его код.

Моя проблема с UISegmentControl, или с оператором switch, или с обоими.

Любые предложения будут приняты с благодарностью..

Кнопка определена следующим образом:

 question_btn  = [[[UISegmentedControl alloc] initWithFrame:CGRectMake(QUESTION_BUTTON_XPOS, questionsButton_YPos, 80, 20)] autorelease]; 
 [question_btn insertSegmentWithTitle:@"No" atIndex:0 animated:NO];
 [question_btn insertSegmentWithTitle:@"Yes" atIndex:1 animated:NO];
 [question_btn setEnabled:YES forSegmentAtIndex:0];
 [question_btn setEnabled:YES forSegmentAtIndex:1];
 question_btn.segmentedControlStyle = UISegmentedControlStyleBar;
 question_btn.tintColor = [UIColor colorWithRed:200.0/255.0 green:200.0/255.0 blue:200.0/255.0 alpha:1.0];
 [question_btn addTarget:self action:@selector(processQuestions) forControlEvents:UIControlEventValueChanged]; 

Ниже приведен процессQuestions

- (void) processQuestions
{
 //NSLog(@"QuestionsView processQuestions: Called");
 //Process the questions i.e. determine whether yes or no was the answer

     answersArray = [[NSMutableArray alloc] init]; 

     int selectedIndex; 

     selectedIndex = [question_btn selectedSegmentIndex];

     switch (selectedIndex)
     {
         case 0:

             NSLog(@"QuestionsView processQuestions: No answered");    

             break;

         case 1:    

             NSLog(@"QuestionsView processQuestions: Yes answered");    

             break;  
     } 

     [answersArray addObject:[NSNumber numberWithInt:selectedIndex]];

     NSLog(@"QuestionsView processQuestions: answersArray contains: %@",  answersArray);
}

Вот как я получил код для правильной итерации и получил выбранный question_btnзначение индекса.Это был просто вопрос создания изменяемого массива для хранения объектов question_btn, а затем установки выбранного значения индекса для каждой кнопки с помощью цикла for.Кнопки ArrayArray установлены в моем методе createView.

buttonsArray = [[NSMutableArray alloc] init];

- (void) processQuestions

{// NSLog (@ "QuestionsView processQuestions: Called");

answersArray = [[NSMutableArray alloc] init];           

int selectedIndex;

for (int i = 0; i < numQuestions; i ++)
{   
    question_btn = (UISegmentedControl*)[buttonsArray objectAtIndex:i];     

    selectedIndex = [question_btn selectedSegmentIndex];

    switch (selectedIndex)
    {
        case 0:

            NSLog(@"QuestionsView processQuestions: No answered for question: %d", i + 1);              

            break;

        case 1:             

            NSLog(@"QuestionsView processQuestions: Yes answered for question: %d", i + 1);     


            break;      
    }   

    [answersArray addObject:[NSNumber numberWithInt:selectedIndex]];
}
    NSLog(@"QuestionsView processQuestions: answersArray contains: %@", answersArray);

}

1 Ответ

0 голосов
/ 03 ноября 2010

Если у вас есть список вопросов, вы можете использовать массив элементов управления Segemnted. У вас может быть кнопка «Получить результат», поэтому при нажатии вы просматриваете все сегментированные элементы управления и проверяете там выбранный индекс (да / нет - 0/1).

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

...