2013-04-19 7 views
5

У меня есть UISearchBar. Когда я выбираю ячейку, я бы хотел, чтобы вся ячейка имела [UIColor grayColor];iOS: Цвет фона - UITableView и аксессуар имеют одинаковый цвет фона

Приведенный ниже код содержимого отображает серый цвет; Однако, на фоне accessoryType цвет показывает, как синий:

enter image description here

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

UITableViewCell *cell = [self.searchDisplayController.searchResultsTableView cellForRowAtIndexPath:indexPath]; 
    cell.contentView.backgroundColor = [UIColor grayColor]; 

    if (self.lastSelected && (self.lastSelected.row == indexPath.row)) 
    { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
     [cell setSelected:NO animated:TRUE]; 
     self.lastSelected = nil; 
    } else { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     cell.accessoryView.backgroundColor = [UIColor grayColor]; // Not working 
     [cell setSelected:TRUE animated:TRUE]; 

     UITableViewCell *old = [self.searchDisplayController.searchResultsTableView cellForRowAtIndexPath:self.lastSelected]; 
     old.accessoryType = UITableViewCellAccessoryNone; 
     [old setSelected:NO animated:TRUE]; 
     self.lastSelected = indexPath; 
    } 

Как сделать синий появляться также как [UIColor grayColor]?

ответ

10

Вы меняете цвет фона в представлении контента, который является лишь частью представления ячейки.

UITableViewCell representation

Изменить цвет фона всей клетки. Однако вы не можете сделать это в своем tableView:didDeselectRowAtIndexPath:, потому что он не будет работать, как описано here.

Примечание: Если вы хотите изменить цвет фона ячейки (установив цвет фона ячейки посредством свойства BackgroundColor объявленного UIView), вы должны сделать это в tableView:willDisplayCell:forRowAtIndexPath: методы делегата и не в tableView:cellForRowAtIndexPath: источника данных.

В вашем случае следите за строкой, выбранной в вашем tableView:didSelectRowAtIndexPath:, сохраняя индекс в ivar и перезагружая вид таблицы.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    _savedIndex = indexPath; 
    [tableView reloadData]; 
} 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if ([_savedIndex isEqual:indexPath]) { 
     cell.backgroundColor = [UIColor grayColor]; 
    } 
} 
+0

Благодарим вас за подробное объяснение. Хотя я нашел более легкий ответ: [cell setSelectionStyle: UITableViewCellSelectionStyleGray]; который работал на мое дело, я предполагаю, что большинство людей, вероятно, согласятся с вашим ответом. Если вы также можете включить код для отслеживания выбранной ячейки, я хотел бы отметить ваш ответ как правильный. – user1107173

+0

Правильно, я предполагал, что вы хотите, чтобы ячейка была нарисована с помощью пользовательского цвета, но, как вы указали на серый цвет '[cell setSelectionStyle: UITableViewCellSelectionStyleGray];' работает также :-) – andreagiavatto

+0

Хотя вопрос был в выборе ячейки, У меня была проблема с дополнительным представлением много раз! Чтобы обойти это, я подклассифицировал и нарисовал похожий шеврон. Это объяснение, а также удивительная диаграмма, помогли мне провести БОЛЬШОЕ время. +1 конечно. Спасибо вам @ andreagiavatto! – Thawe

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