Я хочу динамически изменять содержимое моей ячейки, но на самом деле моя работа не работает даже после перезагрузки данных. Как и ожидалось, при загрузке представления я получаю 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";
}
}
}
Большое вам спасибо, работал как шарм !!! Пальцы вверх! – snowleopard
Я знаю, что вы уже это сделали, но не могли бы вы объяснить, почему мне пришлось переместить его из инструкции cell = nil. С уважением – snowleopard
Конечно. Когда вы перезагружаете ячейку, 'dequeueReusableCellWithIdentifier:' перерабатывает одну из ячеек, которую вы перезагружаете, и возвращает ее. Поэтому ваша переменная 'cell' уже установлена до того, как вы перейдете к' if (cell == nil) ', поэтому программа никогда не входит в этот блок. Он работает правильно на первом проходе, потому что изначально нет ячеек для повторного использования, а 'dequeueReusableCellWithIdentifier:' возвращает 'nil', что заставляет программу входить в блок. –