2012-03-23 1 views
-2

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

-(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");    
    } 

} 

} 
+0

«Когда я проверяю длину массива после добавления, я обнаружил, что это 0». Какой массив вы проверили? Ваш код возвращается после добавления 1 элемента в любой массив, который не является sec_0. – ColdLogic

+0

Кажется, что, что я могу сделать, чтобы добавить все кнопки с указанным id вместо добавления одного элемента? –

+1

удалите части «return sec_ #» с коммутатора. Проверьте мой ответ ниже с обновленным кодом – ColdLogic

ответ

1

Причина, по которой ваши массивы пустые, заключается в том, что вы возвращаетесь после добавления какого-либо значения в массив, который не является 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]; 
} 
+0

«удалить параметр кнопки», поэтому, как определить номер тега нажатой кнопки! –

+0

Я отредактировал вопрос, прежде чем вы даже прокомментировали его, чтобы вернуть его после того, как я перечитаю ваш исходный вопрос: P – ColdLogic

+0

Но независимо, если вы удалили параметр кнопки, вы можете заполнить все массивы своими кнопками, если вы просто переключитесь на тег каждой кнопки, вместо того, чтобы просто заполнить 1 массив – ColdLogic

2

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

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

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

[secs[tag_No] addObject:bton]; 

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

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

+0

Вы не имеете в виду 'NSMutableArray *'? 'NSMutableArray' является неполным. –

+0

Справа. Отредактировано .. –

Смежные вопросы