2015-05-21 9 views
0

Я хочу изменить выбранные данные ячейки навсегда, как это было сделано в моем методе didSelectRowAtIndexPath, но проблема в том, что когда я выбираю строку, данные ячейки изменяются, но когда я выбираю любую другую строку, предыдущая становится такой, какая была, и я также хотите сохранить строки в массиве, которые были выбраны в массиве. вот мой код прямо сейчас.Как изменить выбранные данные ячейки постоянно?

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
@try { 
    static NSString *cellidentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellidentifier]; 
    if(cell == nil) 
    { 
     NSArray *cellObjects = [[NSBundle mainBundle] loadNibNamed:@"Cell" owner:self options:nil]; 
     cell = (UITableViewCell*) [cellObjects objectAtIndex:0]; 
    } 

    UILabel *label; 
    long row = [indexPath row]; 

    label = (UILabel *)[cell viewWithTag:10]; 

    label.text =time[row]; 
    label.textColor = [UIColor blackColor]; 
    cell.imageView.image = [img_clock_blue objectAtIndex:indexPath.row]; 
    cell.backgroundColor = [UIColor yellowColor]; 

    [tableView setSeparatorInset:UIEdgeInsetsZero]; 

    //int hecValue; 
    return cell; 
} 
@catch (NSException *exception) 
{ 
    NSLog(@"%@",exception); 
} 
} 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
[tableView reloadData]; 
UITableViewCell *cell1 = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; 
cell1.imageView.image = [UIImage imageNamed:@"1_red.png"]; 
cell1.backgroundColor = [UIColor clearColor]; 
} 
+0

Если вам нужно сохранить ранее выбранную ячейку, как она есть, вам нужно ее отслеживать. и теперь вы перезагружаете таблицу в 'didSelectRowAtIndexPath:', поэтому ранее выбранная будет перезагружена. – Akhilrajtr

+0

@ Насир это происходит из-за того, что вы перегружаете табличное представление каждый раз после выбора дороги, просто удалите строку [tableView reloadData]; и попробуйте ... –

ответ

0

Попробуйте это,

  1. создать NSMutableArray@property в вид контроллера. позволяет говорить selectedIndexArray
  2. инициализировать массив в viewDidLoad по self.selectedIndexArray = [[NSMutableArray alloc] init];

в cellForRowAtIndexPath методе

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //other codes 
    if ([self.selectedIndexArray containsObject:indexPath]) { 
     cell.imageView.image = [UIImage imageNamed:@"1_red.png"]; //assumes all selected cells have same image 
    } else { 

     cell.imageView.image = [img_clock_blue objectAtIndex:indexPath.row]; 
    } 

    .....//other code 
} 

в didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.selectedIndexArray addObject:indexPath]; 
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
} 
+0

позвольте мне попробовать –

+0

@Akhilrajti Я также хочу сохранить, какая строка была выбрана в массиве. –

+0

в 'self.selectedIndexArray' у вас есть весь индекс выбранных ячеек. – Akhilrajtr

0

Код для установки содержимого ячеек должен быть в cellForRowAtIndexPath:.

Вы должны создать реальную модель данных для представления содержимого ваших ячеек вместо массива time. Создайте массив пользовательских объектов (или словарей) со свойствами, такими как «время» и «выбран». Используйте indexPath.row, чтобы найти нужный объект, а затем используйте его свойство «selected», чтобы решить, какое изображение нужно ему передать.

didSelectRowAtIndexPath: комплекты «выбраны» ДА или НЕТ и не требуют изменения ячейки.

1

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

в вашем didSelectRowAtIndexPath просто найдите objectAtIndex: в массиве, измените его по своему желанию, а затем перезагрузите таблицу.

Если у вас есть только, например, титры (NSStrings), то достаточно будет массива строк. Но большую часть времени это не будет, потому что вы показываете что-то обычай.

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

Создайте свой класс Animal, наследующий от NSObject. (Новый файл, класс и т. Д.).

Добавьте свойства, которые понадобятся в файле Animal.h, например

@property (weak, nonatomic) NSString *name; 
@property (nonatomic) int size; 
@property (nonatomic) int weight; 
@property (weak, nonatomic) NSString *countryOfOrigin; 

Вы также технически нужен класс для создания/управления/извлечения/сохранить эти Animal объекты, но давайте держать его простым и сделать он находится в контроллере viewDidLoad.

- (void)viewDidLoad{ 
    [super viewDidLoad]; 

    Animal *myAnimal = [[Animal alloc]init]; 
    myAnimal.name = @"Lion"; 
    myAnimal.size = 13; 
    myAnimal.weight = 100; 
    myAnimal.countryOfOrigin = @"NoIdeaHahahah"; 

    // You can hardcode a couple like that, and add them to your array used for your tableview data. Basically we just want some of your custom objects in an array, for your tableview. 
    } 

Итак, теперь у нас есть массив животных (наши данные) для вашего стола. Вы можете использовать это для создания своих строк.

При создании ячейки в cellForRow, просто начните с:

Animal *animal = [myArray objectAtIndex:indexPath.row]; 

, а затем кормить клетки со свойствами этого животного

cell.titleLabel.text = animal.name; 

, например.

И в didSelect вы можете изменить это конкретное животное, как я уже сказал в самом начале этого ответа :)

Animal *animal = [myArray objectAtIndex:indexPath.row]; 
animal.name = @"IJustChangedTheName"; 

[self.tableView reloadData]; 

Все это является обычной практикой, за исключением того, что мы делали в viewDidLoad, что очень но я уверен, что вы сможете адаптировать это к своему коду :)

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