2013-05-31 5 views
0

Я хочу динамически изменять содержимое моей ячейки, но на самом деле моя работа не работает даже после перезагрузки данных. Как и ожидалось, при загрузке представления я получаю 1 1 1 1 1 1 1 по вертикали в таблице, когда я нажимаю сегмент 1, я получаю 4 4 4 4 4 4 4, как и ожидалось, однако, когда я нажимаю 2, я получаю -1 - 1 -1 -1 -1 -1 снова, и когда я нажимаю 3, я снова получаю 4 4 4 4 4 4 4. Кроме того, содержимое моих ячеек зависит от последовательности, в которой я нажимаю кнопки. Мой код ниже таблицы имеют только один ряд и многочисленные секции:Динамическое изменение текста ячейки

- (void)viewDidLoad 
{ 
currentarray=[NSArray arrayWithObjects:@"-1",@"-2",@"-3", @"-4", nil]; 
} 
- (IBAction)SegControl: (id) sender{ 

for(int i=0; i<4; i++){ 
    if(theSegControl.selectedSegmentIndex==i){ 
     buttonpressed[i]=[NSNumber numberWithInt:1]; 
    } 
    else { 
     buttonpressed[i]=[NSNumber numberWithInt:0]; 
    } 
} 

if([buttonpressed[0] intValue]==1){ 

    currentarray=sorteddectotalteamPoints; 

} 

else if([buttonpressed[1] intValue]==1){ 

    currentarray=[NSArray arrayWithObjects:@"4",@"6",@"7", @"8", nil]; NSLog(@"%@",@"two pressed"); 
} 

else if([buttonpressed[2] intValue]==1){ 

    currentarray=[NSArray arrayWithObjects:@"9",@"10",@"11", @"12", nil]; NSLog(@"%@",@"three pressed"); 
} 

else { 

    currentarray=[NSArray arrayWithObjects:@"13",@"14",@"15", @"16", nil]; NSLog(@"%@",@"four pressed"); 
} 

//to update the cells  
for(int i=0; i<[teamnameswithoutRepeat count];i++){ 
    [byTeam reloadSections:[NSIndexSet indexSetWithIndex:i] withRowAnimation:UITableViewRowAnimationFade]; 
} 
    NSLog(@"%@",currentarray); 


    } 

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, tableView.rowHeight)] ; 

label.font = [UIFont fontWithName:@"Helvetica-Bold" size:14]; 
label.layer.borderColor = [UIColor whiteColor].CGColor; 
label.layer.borderWidth = 1.0; 


label.textAlignment = NSTextAlignmentCenter; 
label.textColor = [UIColor blackColor]; 
NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.section]; 

MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 

if (cell == nil) { 

    cell = [[MyTableCell alloc] initWithStyle:UITableViewCellStyleDefault 
           reuseIdentifier:MyIdentifier] ; 
    if(tableView==byTeam) 
    { 

     //[tableView reloadData]; 
     label.text=[currentarray objectAtIndex:0]; 
     [cell.contentView addSubview:label]; 
     label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
     UIViewAutoresizingFlexibleHeight; 
     // UITableViewCell *cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]]; 
     //cell.textLabel.text = @"updated text"; 




     } 

     } 
     } 

ответ

0

Вам нужно переместить код, настраивающий ячейку за пределами if (cell == nil) блока так, что она будет выполнена при перезагрузке клеток, и они получают переработаны dequeueReusableCellWithIdentifier: :

if (cell == nil) { 

    cell = [[MyTableCell alloc] initWithStyle:UITableViewCellStyleDefault 
          reuseIdentifier:MyIdentifier] ; 
} 

if(tableView==byTeam) { 
    label.text=[currentarray objectAtIndex:0]; 
    //... 
} 

Кроме того, если я что-то отсутствует, ваш сегментированный обработчик управления может быть упрощена совсем немного, устраняя переменную buttonPressed. Что-то вроде этого, например:

- (IBAction)SegControl:(id)sender 
{ 
    switch(sender.selectedSegmentIndex) { 
     case 0: 
      currentArray = sorteddectotalteamPoints; 
      break; 
     case 1: 
      currentArray = [NSArray arrayWithObjects:@"4",@"6",@"7", @"8", nil]; 
      break; 
     case 2: 
      currentArray = [NSArray arrayWithObjects:@"9",@"10",@"11", @"12", nil];; 
      break; 
     case 3: 
      currentArray = [NSArray arrayWithObjects:@"13",@"14",@"15", @"16", nil]; 
      break; 
    } 

    //to update the cells  
    for(int i=0; i<[teamnameswithoutRepeat count];i++) { 
     [byTeam reloadSections:[NSIndexSet indexSetWithIndex:i] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
}  
+0

Большое вам спасибо, работал как шарм !!! Пальцы вверх! – snowleopard

+0

Я знаю, что вы уже это сделали, но не могли бы вы объяснить, почему мне пришлось переместить его из инструкции cell = nil. С уважением – snowleopard

+0

Конечно. Когда вы перезагружаете ячейку, 'dequeueReusableCellWithIdentifier:' перерабатывает одну из ячеек, которую вы перезагружаете, и возвращает ее. Поэтому ваша переменная 'cell' уже установлена ​​до того, как вы перейдете к' if (cell == nil) ', поэтому программа никогда не входит в этот блок. Он работает правильно на первом проходе, потому что изначально нет ячеек для повторного использования, а 'dequeueReusableCellWithIdentifier:' возвращает 'nil', что заставляет программу входить в блок. –

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