2015-10-14 4 views
2

У меня есть пользовательский номер UITableViewCellHobbies.Как вернуть обратно изменения, сделанные в UITableViewCell

Все работает нормально. Кроме одного UIISSue.

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

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

Вот код, я использую, чтобы изменить textColor конкретной ячейки:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
HobbiesCell *cell = (HobbiesCell*)[tableView cellForRowAtIndexPath:indexPath]; 
cell.dateLabel.textColor = [UIColor colorWithWhite:255 alpha:0.5f]; 

} 

Как я могу вернуть его обратно, когда пользователь выбирает другую ячейку.

+0

попробовать таким образом http://stackoverflow.com/a/31545422/3134130 –

ответ

2

Вы можете создать объект UITableViewCell, скажем previousCell и назначить его каждый раз, когда вы его выбираете. Это будет ваша последняя выбранная ячейка, и вы можете присвоить ей цвет по умолчанию каждый раз, когда вы нажимаете новую ячейку.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    HobbiesCell *cell = (HobbiesCell*)[tableView cellForRowAtIndexPath:indexPath]; 
    previousCell.dateLabel.textColor = [UIColor blackColor]; //Assuming that this is the color you want to go back 
    cell.dateLabel.textColor = [UIColor colorWithWhite:255 alpha:0.5f]; 
    previousCell = cell; 
} 
+0

я бы отговорить проведение ссылку на саму клетку, как это, вероятно, будет использоваться повторно. –

1

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

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

Чтобы вернуть цвет, просто держите ссылку на последние NSIndexPath.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    MyRowModel *prevRowModel = [self.rowModels objectAtIndex:self.lastIndexPath.row]; 
    prevRowModel.color = [UIColor colorWithWhite:255 alpha:1f]; 

    MyRowModel *rowModel = [self.rowModels objectAtIndex:indexPath.row]; 
    rowModel.color = [UIColor colorWithWhite:255 alpha:0.5f]; 

    [self.tableView reloadRowsAtIndexPaths:@[indexPath, self.lastIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    self.lastIndexPath = indexPath; 
} 
2

объявить эту переменную

int selectedIndex; 

в вашем cellForRowAtIndexPath

if(indexPath.row == selectedIndex) 
{ 
cell.dateLabel.textColor = [UIColor colorWithWhite:255 alpha:0.5f]; 
} 
else 
{ 
    cell.dateLabel.textColor = [UIColor colorWithWhite:0 alpha:0.5f];//your default cell color 
} 

и в вашем didSelectRowAtIndex

selectedIndex = indexPath.row; 
[tableView reloadData]; 
+0

Предполагается, что существует только одна секция tableView –

+0

, это будет работать только для одного раздела –

-2

Вам необходимо сохранить ссылку на текущую SELEC ted indexPath. Что-то вроде ...

@property (nonatomic, strong) NSIndexPath *currentHobby; 

Затем в методе didSelectRowAtIndexPath: вставить этот ...

if(_currentHobby && ![_currentHobby isEqual:indexPath]) { 
    HobbiesCell *currentCell = [tableView cellForRowAtIndexPath:_currentHobby]; 
    currentCell.dateLabel.textColor = [UIColor originalColor]; 
} 
_currentHobby = indexPath; 

Затем в cellForRowAtIndexPath: убедитесь, что вы включили ...

if([indexPath isEqual:_currentHobby]) { 
    cell.dateLabel.textColor = [UIColor selectedColor]; 
} else { 
    cell.dateLabel.textColor = [UIColor originalColor]; 
} 
1

Если вы идете для перезагрузки tableview затем попробуйте это.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // reload the table 
    [tableView reloadData]; 
HobbiesCell *cell = (HobbiesCell*)[tableView cellForRowAtIndexPath:indexPath]; 
previousCell.dateLabel.textColor = [UIColor colorWithWhite:255 alpha:0.5f]; // color insert which you want to insert 
} 

надеюсь, что это поможет вам без добавления разнообразия.

1

Пробовать cell.textLabel.выделенныйTextColor.

if (cell == nil) { 

     ........ 
     /* your cell initiation code */ 
     ........ 

     cell.textLabel.textColor = [UIColor whiteColor]; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
     cell.textLabel.highlightedTextColor = [UIColor orangeColor]; 
    } 
+0

Я написал этот метод где? Rashmi – NSUser

+0

В вашем cellForRowAtIndexPath: делегировать метод! Просто попробуйте и проверьте. –

+0

спасибо ... Ты индийский: p – NSUser

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