2015-05-12 4 views
0

Im работает с UITableView, который имеет пользовательскую ячейку. Пользовательская ячейка имеет только метку и UIImage, в качестве флажка будет использоваться UIImage.Когда didDeselect a Custom Cell изображение не изменяется на iOS

Так что проблема заключается в том, что после того, как я нажму на строку, изображение флажка изменится на галочку png-изображения (это нормально). НО, как только я снова нажму на ту же строку, она не влияет на строку, функция didDeselectRowAtIndexPath работает, я устанавливаю некоторые NSLogs, чтобы проверить это, но изображение не будет изменено на uncheckbox, а цвет фона не изменится.

я чувствовать его, потому что TableView его не успокоили

Самое смешное в том, что если я не использую пользовательский ячейку и я использую только accessoryType ни одному или галочкой (в зависимости случай) он работает.

Вот код для viewDidLoad были я просто инициализировать некоторые переменные:

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    //Let me select more than one row 
    self.tableView.allowsMultipleSelection = YES; 

//Used to store all the cells that were selected 
     self.selectedIndexPaths = [[NSMutableArray alloc] init]; 

} 

Я получил 1 Раздел и 20 строк (позже его будет массив, но не тот без проблем)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    CustomeCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

    if(cell == nil) 
    { 
     cell = [[CustomeCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
    } 


    cell.cellNameDrinkLabel.text = @"Cell"; 

    if ([self.selectedIndexPaths indexOfObject:indexPath] == NSNotFound) 
    { 

     cell.cellCheckboxImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"uncheckbox.png"]]; 

    } else 
    { 
     cell.cellCheckboxImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"checkbox.png"]]; 

    } 



    return cell; 
} 

Вот моя didSelectRowAtIndexPath функция:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomeCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 
    cell.cellCheckboxImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"checkbox.png"]]; 


    if(![self.selectedIndexPaths containsObject:indexPath]) 
    { 
     [self.selectedIndexPaths addObject:indexPath]; 
    } 

    NSLog(@"%ld", (long)indexPath.row); 

} 

И здесь я S не didDeselectRowAtIndexPath функции (один я чувствую это проблема)

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomeCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

    cell.cellCheckboxImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"uncheckbox.png"]]; 

    [self.selectedIndexPaths removeObject:indexPath]; 

    NSLog(@"%ld", (long)indexPath.row); 
} 
+0

У меня это было раньше, пришлось взломать его ужасно, используя indexPathForVisibleRows, чтобы заставить его работать. Заинтересованы в том, есть ли законное решение. – brandonscript

ответ

0

Почему вы не опускаем

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 

и попробовать как

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(![self.selectedIndexPaths containsObject:indexPath]) 
    { 
     [self.selectedIndexPaths addObject:indexPath]; 
    } 
    else 
    { 
     [self.selectedIndexPaths removeObject:indexPath]; 
    } 
    [tableView reloadData]; 
    NSLog(@"%ld", (long)indexPath.row); 
} 
+0

Это сделало эту работу! большое спасибо! – atsepa

+0

Если это вам помогло, проголосуйте: P – Kaey

0

и можно сделать так, там нет необходимо выполнить - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

u можете попробовать вот так

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomeCellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CELL"]; 
    if(cell == nil) 
    { 
     cell = [[CustomeCellTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELL"]; 
    } 
    if([selectedPaths containsObject:indexPath]) 
     cell.checkMarkImage.image = [UIImage imageNamed:@"check.png"]; 
    else 
     cell.checkMarkImage.image = [UIImage imageNamed:@"uncheck.jpg"]; 

return cell; 
} 

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //get the custom cell 
    CustomeCellTableViewCell *cell = (CustomeCellTableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; 
    if(cell) 
    { 
     if([selectedPaths containsObject:indexPath]) 
     { 
      [selectedPaths removeObject:indexPath]; 
      cell.checkMarkImage.image = [UIImage imageNamed:@"uncheck.jpg"]; 
     } 
     else 
     { 
      [selectedPaths addObject:indexPath]; 
      cell.checkMarkImage.image = [UIImage imageNamed:@"check.png"]; 
     } 
    } 
    //deselect the cell with animation 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 
2

Это работает для меня, надеюсь, это сработает и для вас.

Мы можем управлять им одним способом.

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    tablecell *cell = (tablecell *)[tableView cellForRowAtIndexPath:indexPath]; 
    UIImage *checkImage = [UIImage imageNamed:@"check.png"]; 
    NSData *dataCheck = UIImagePNGRepresentation(checkImage); 
    NSData *dataCheckCell = UIImagePNGRepresentation(cell.img.image); 
    if ([dataCheckCell isEqualToData:dataCheck]) { 
     cell.img.image = [UIImage imageNamed:@"uncheck.png"]; 
    } 
    else 
    { 
     cell.img.image = [UIImage imageNamed:@"check.png"]; 
    } 
} 

Сообщите мне, если вы получили блок в приведенном выше коде. поможет вам решить.

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