2013-04-19 16 views
5

UISearchBar'ım var. Hücreyi seçtiğimde, tüm hücrenin bir [UIColor grayColor] olmasını isterim;iOS: Arka Plan Rengi - UITableView ve Aksesuar aynı arka plan rengine sahip

Aşağıdaki kodla, contentView rengi Gri olarak görüntülenir; Ancak, arka plan accessoryType rengi mavi olarak görüntülenir:

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; 
    } 

nasıl Mavi [UIColor grayColor] olarak da görünür yapabilirim?

cevap

10

Hücre görünümünün yalnızca bir kısmı olan içerik görünümünün arka plan rengini değiştiriyorsunuz.

UITableViewCell representation

Değişim tüm hücrenin arka plan rengi. Ancak, tableView:didDeselectRowAtIndexPath: kodunuzda bunu yapamazsınız, çünkü here açıklandığı gibi çalışmayacaktır.

Not: Eğer (UIView tarafından açıklanan backgroundColor mülkiyet yoluyla bir hücrenin arka plan rengini ayarlayarak) bir hücrenin arka plan rengini değiştirmek istiyorsanız temsilci tableView:willDisplayCell:forRowAtIndexPath: yönteminde yapmalıyız ve Veri kaynağının tableView:cellForRowAtIndexPath: içinde değil. Senin durumunda

, bir Ivar içinde endeks tasarrufu ve tablo görünümüne yeniden yükleyerek senin tableView:didSelectRowAtIndexPath: seçilen satıra takip edebilirsiniz.

- (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

Detaylı açıklamanız için teşekkür ederiz. Daha kolay bir cevap bulsam da: [cell setSelectionStyle: UITableViewCellSelectionStyleGray]; Benim durumum için çalıştı, çoğu insanın muhtemelen senin cevabın ile aynı fikirde olacağını farz ediyorum. Seçilen hücreyi takip etmek için bir kod da ekleyebiliyorsanız, cevabınızı doğru olarak işaretlemek istiyorum. – user1107173

+0

Doğru, hücrenin özel bir renkle boyanmasını istediğini varsayıyordum ama gri renk için işaret ettiğin gibi [cell setSelectionStyle: UITableViewCellSelectionStyleGray]; 'ayrıca çalışıyor :-) – andreagiavatto

+0

Soru bir hücre seçmek için olsa da, Bu aksesuar görünümü problemini defalarca yaşadım! Etrafında almak için alt sınıf ve benzer bir chevron çizdim. Bu açıklama ve şaşırtıcı şema, BÜYÜK zaman konusunda bana yardımcı oldu. Emin olmak için +1. Teşekkürler @andreagiavatto! – Thawe