2016-10-21 4 views
0

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

У меня есть UITableView с n количество столбцов.
Дело в том, что столбец группируется в соответствии с ключом. Поэтому мой заголовок UITableView разделен на два, один для column group, и эта группа столбцов делится на columns.
Я создал пользовательский класс для cell, там я показываю radio button в каждом столбце.

Код:

В cellForRowAtIndexPath метод:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    GridTableViewCell *cell = nil; // My custom class for cell 

    CGFloat startX = 230; 

    if (cell == nil) 
    { 
     cell = [[GridTableViewCell alloc] initWithStyle1:UITableViewCellStyleDefault reuseIdentifier:@"Cell" withRows:[self.rowHeaderArray objectAtIndex:indexPath.row]]; 

     for (int i = 0; i < [self.groupColumNmeArray count]; i++) { // groupColumNmeArray contains the Column Group name 

     NSArray *values = [_subColumnDict objectForKey:[self.groupColumNmeArray objectAtIndex:i]]; // subColumnDict contains the value for each column 

     self.originalDataArray = [CustomTableHeaderParser parseColumnInfo:values];// Parsing the values array for getting column name, type, width etc 

     for (CustomTableColumn *column in self.originalDataArray) 
     { 

      switch (column.columnType) // acc. to column type display the cell with values. 
      { 
       case RadioBtn: 
       { 

        _btTemp = [[UIButton alloc]initWithFrame:CGRectMake(startX, 2, subCellWidth , 40)]; 

        [_btTemp setTag:indexPath.row];//indexPath.row]; 
        [_btTemp addTarget:self action:@selector(radioButtonsClicked:) forControlEvents:UIControlEventTouchUpInside]; 
        [_btTemp setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
        [_btTemp setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
        _btTemp.titleLabel.font =[UIFont systemFontOfSize:14.f]; 

        [self.radioButtons addObject:_btTemp]; 

        [cell addSubview:_btTemp]; 

       } 
        break; 

      startX += 2+subCellWidth; 
     } 
    } 
} 

cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame]; 
cell.selectedBackgroundView.opaque = YES; 

return cell; 

} 

Радио метод нажатия кнопки действия;

-(IBAction) radioButtonsClicked:(UIButton *) sender { 

    if ([sender isSelected]) { 

     [sender setSelected: NO]; 
     [sender setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 

    } else { 

     [sender setSelected: YES]; 
     [sender setImage:[UIImage imageNamed:@"radio-on.png"] forState:UIControlStateNormal]; 
    } 
    NSLog(@"BUTTON TAG %ld",(long)sender.tag); 
} 

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

Может кто-нибудь мне помочь. Любая помощь будет очень заметной.

+0

Вы хотите выполнить как это http://stackoverflow.com/questions/40049590/reusing-cell-doesnt-work-well-tableview/40058046#40058046 –

+0

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

+0

в вашей ячейке у вас есть одна группа, которая является правой кнопкой? и вы хотите разрешить только один выбор для одной ячейки –

ответ

0

Вы можете установить статус выбора другой кнопки как следующее

-(IBAction) radioButtonsClicked:(UIButton *) sender { 
 
    
 
    sender.selected = !sender.selected; 
 
    
 
    for (UIView *vw in sender.superview.subviews) 
 
    { 
 
     if([vw isKindOfClass:[UIButton class]] && vw != sender) 
 
     { 
 
      UIButton *otherBtn = (UIButton*)vw; 
 
      otherBtn.selected = NO; 
 
     } 
 
    } 
 
}

для настройки изображения кнопки - вкл/выкл, написать этот код в момент создания кнопки в cellforrow ..

[_btTemp setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
 

 
[_btTemp setImage:[UIImage imageNamed:@"radio-on.png"] forState:UIControlStateSelected];

+0

Хорошо, но с помощью этого кода мы можем выбрать только один одна кнопка для строки справа. но то, что мне нужно, мы можем выбрать только одну кнопку для группы ** Column Group **, а строка содержит более одной группы столбцов –

+0

, что вы понимаете под группой столбцов? Можете ли вы поделиться снимком экрана? – Darshana

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