цвет фона ячейки остается после отмены его выбора.

#ios #uitableview

#iOS #uitableview

Вопрос:

У меня есть один TableView. При выборе любой строки я нажимаю другой viewcontroller. Я меняю цвет выбранной ячейки. Но теперь, когда я возвращаюсь из другого viewcontroller и выбираю другую строку, предыдущий выбранный цвет ячейки остается прежним. Я сделал следующее, чтобы изменить его, но он не работает.

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
}
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath];
    cell.backgroundColor=[UIColor whiteColor];
}
  

И вот как я применяю цвет фона к ячейке:

 -(UIView *)selectedCellView{
    UIView *cellView=[[UIView alloc]init];
    //cellView.backgroundColor=RGB(155,130,110);
    cellView.backgroundColor=[UIColor lightGrayColor];
    return cellView;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
cell.selectedBackgroundView=[self selectedCellView];
...
}
  

Комментарии:

1. было бы намного лучше, если бы вы могли сохранить значение indexPath.row в свойстве и в соответствии с этим свойством изменить цвет фона ячейки, а фон других ячеек оставить белым или любым другим цветом, который вам нравится

2. Не является ли установленный шаблон для использования dequeueReusableCellWithIdentifier etc?

3. @trojanfoe Да, я использовал то же самое

4. @vivek Не совсем. Если задан цвет фона selectedCellView , и вы не вызываете его (потому dequeueReusableCellWithIdentifier что возвращает не- nil ), то это объяснило бы вашу проблему. Если вы используете dequeueReusableCellWithIdentifier , переместите его в selectedCellView .

Ответ №1:

cellForRowAtIndexPath вызывается каждый раз, когда пользователь прокручивает TableView , это означает, что вы выделяете экземпляр UIView для каждой прокрутки. Это добавляет представление над defaultSelectionView. Более простой способ — изменить cell.contentView.backgroundColor in didSelectRowAtIndexPath и вернуть его к предыдущему значению в didDeselectRowAtIndexPath

Ответ №2:

cellForRowAtIndexPath этот метод вызывается всякий раз, когда создается ячейка, поэтому в зависимости от количества ячеек он будет вызван. Таким образом, вы можете просто изменить метод in didSelectRowAtIndexPath и вернуться к исходному цвету в didDeselectRowAtIndexPath методе. Также вы можете использовать опцию выделения для отображения выбранной ячейки cell.selectionStyle . Также одна вещь, которая не нужна для вызова didDeselectRowAtIndexPath метода simple в didSelectRowAtIndexPath u, может изменить цвет и нажать или представить ваш второй контроллер просмотра, а непосредственно перед нажатием или представлением просто измените цвет ячейки на исходный цвет.