Как добавить кнопки в MutableArray в соответствии с их номером тега в target-C? - PullRequest
0 голосов
/ 23 марта 2012

у меня есть представление, содержащее много разделов (группа кнопок), каждый раздел в представлении содержит уникальный идентификатор, я хочу добавить кнопки в NSMutableArray в соответствии с их идентификатором (т. Е. Когда пользователь нажимает кнопку, я получаю идентификатор кнопкизатем добавьте в массив все кнопки с этим идентификатором) я написал этот код, но когда я проверял длину массива после добавления, я обнаружил, что он равен 0 !!Подсказка: sec_0, sec_1, sec_2, sec_3, sec_4, sec_5, sec_6, sec_7, sec_8 - это заранее определенные массивы NSMUtable.

-(NSMutableArray*)findButtonsSection:(UIButton *)buton{

NSLog(@"Inside findButtonsSection");
int tag_No=buton.tag;
for (UIButton* bton in self.view.subviews) {
    NSLog(@"Inside findButtonsSection2");
    switch (tag_No) {
        case 0:
                [sec_0 addObject:bton];
            NSLog(@"Number of buttons in array=%i",[sec_0 count]);

            break;
        case 1:
            NSLog(@"Button tag No=%i",buton.tag);

            [sec_1 addObject:bton];
            return sec_1;
            break;
        case 2:
            NSLog(@"Button tag No=%i",buton.tag);

            [sec_2 addObject:bton];
            return sec_2;
            break;
        case 3:
            NSLog(@"Button tag No=%i",buton.tag);

            [sec_3 addObject:bton];
            return sec_3;
            break;
        case 4:
            NSLog(@"Button tag No=%i",buton.tag);

            [sec_4 addObject:bton];
            return sec_4;
            break;
        case 5:
            NSLog(@"Button tag No=%i",buton.tag);

            [sec_5 addObject:bton];
            return sec_5;
            break;
        case 6:
            NSLog(@"Button tag No=%i",buton.tag);

            [sec_6 addObject:buton];
            return sec_6;
            break;
        case 7:
            NSLog(@"Button tag No=%i",buton.tag);

            [sec_7 addObject:bton];
            return sec_7;
            break;
        case 8:
            NSLog(@"Button tag No=%i",buton.tag);

            [sec_8 addObject:bton];
            return sec_8;
            break;
        default:
            NSLog(@"nnnnnnnnnn");            
    }

}

}

Ответы [ 2 ]

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

Сформируйте массив C из этих изменяемых массивов sec_x после их создания. Как это:

NSMutableArray *secs[] = {sec_0, sec_1....}; 

Затем используйте индексирование вместо переключателя:

[secs[tag_No] addObject:bton];

Квадратные скобки в этом случае обозначают доступ к элементу массива, а не вызов метода Objective C.

В более общем замечании читайте о старом старом C. В учебных руководствах по Objective C / iOS часто предполагается, не говоря об этом, что у вас есть некоторый фон C, и начните с объяснения объектной системы Objective C, а не битов C .

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

Причина, по которой все ваши массивы пусты, заключается в том, что вы возвращаете после добавления любое значение в массив, который не является sec_0.Вы не хотите этих возвратов, так как они вырвутся из вашего цикла for.Попробуйте следующий код:

Вы также можете переключить массив, чтобы сэкономить несколько строк кода и улучшить читаемость.

-(NSMutableArray *)findButtonSelections:(UIButton *)button {
     NSArray *array = [NSArray arrayWithObjects:sec_0, sec_1, sec_2, sec_3, sec_4, sec_5, sec_6, sec_7, sec_8, nil];

     int tag = button.tag;

     //BTW, this function will return all views, not just buttons
     for (UIButton* bton in self.view.subviews) {
         //So add this to make sure the view is a button
         if([bton isKindOfClass:[UIButton class]]) {

              [[array objectAtIndex:tag] addObject:bton];
         }
     }

     return [array objectAtIndex:tag];
}

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

-(NSMutableArray *)findButtonSelections:(UIButton *)button {

    NSLog(@"Inside findButtonsSection");

    int tag_No=buton.tag;
    for (UIButton* bton in self.view.subviews) {

        NSLog(@"Inside findButtonsSection2");
        switch (tag_No) {
            case 0:
                [sec_0 addObject:bton];
                NSLog(@"Number of buttons in array=%i",[sec_0 count]);

                break;
            case 1:
                NSLog(@"Button tag No=%i",buton.tag);

                [sec_1 addObject:bton];
                break;
            case 2:
                NSLog(@"Button tag No=%i",buton.tag);

                [sec_2 addObject:bton];
                break;
            case 3:
                NSLog(@"Button tag No=%i",buton.tag);

                [sec_3 addObject:bton];
                break;
            case 4:
                NSLog(@"Button tag No=%i",buton.tag);

                [sec_4 addObject:bton];
                break;
            case 5:
                NSLog(@"Button tag No=%i",buton.tag);

                [sec_5 addObject:bton];
                break;
            case 6:
                NSLog(@"Button tag No=%i",buton.tag);

                [sec_6 addObject:buton];
                break;
            case 7:
                NSLog(@"Button tag No=%i",buton.tag);

                [sec_7 addObject:bton];
                break;
            case 8:
                NSLog(@"Button tag No=%i",buton.tag);

                [sec_8 addObject:bton];
                break;
            default:
                NSLog(@"nnnnnnnnnn");            
        }

    }

    return [array objectAtIndex:tag];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...