#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, может изменить цвет и нажать или представить ваш второй контроллер просмотра, а непосредственно перед нажатием или представлением просто измените цвет ячейки на исходный цвет.