2011-05-28 19 views
5

Düzenleme moduna girdiğimde, UITableView'umda, seçilebilir birkaç hücrenin seçilebilir olmasını istiyorum. UITableView sınıfının allowsSelectionDuringEditing özelliğine sahip olduğunu biliyorum, ancak bu tüm UITableView için geçerlidir. Bunu, hücre başına temelinde ayarlamak için herhangi bir ilgili temsilci yöntemi görmüyorum.UITableView, hücre başına seçim modunu düzenlerken düzenlerken

En iyi çözüm, allowsSelectionDuringEditing'u YES'a ayarlamaktır. Ardından, didSelectRowAtIndexPath'da, tablo görünümü düzenleniyorsa istenmeyen seçimleri filtreleyin. Ayrıca, cellForRowAtIndexPath'da, selectionStyle hücrelerini Yok olarak değiştirin.

bu sorun düzenleme moduna geçmeden UITableViewCells yeniden olmamasıdır, bu yüzden ekran dışında kaydırma kadar onların selectionStyle değişmez. Yani, setEditing'de, görünür hücrelerin üzerinde yinelemeli ve selectionStyle değerini ayarlamalıyım.

Bu, ancak bu sorun için daha iyi/daha zarif bir çözüm olup olmadığını merak ediyorum. Kodumun temel çerçevesi eklenmiştir. Herhangi bir öneri büyük takdir! Teşekkür ederim.

// Individual rows can opt out of having the -editing property set for them. If not implemented, all rows are assumed to be editable. 

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath; 

düzenleme moduna geçerken, işlevini kullanın:

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

    if (self.editing && ![self _isUtilityRow:indexPath]) return; 
    // Otherwise, do the normal thing... 
} 

- (UITableViewCell*) tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath { 

    // UITableViewCell* cell = ... 

    if (self.editing && ![self _isUtilityRow:indexPath]) 
    { 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } 
    else 
    { 
     cell.selectionStyle = UITableViewCellSelectionStyleBlue; 
    } 

    return cell; 
} 

- (void) setEditing:(BOOL)editing animated:(BOOL)animated { 

    [super setEditing:editing animated:animated]; 

    if (editing) 
    { 
     for (UITableViewCell* cell in [self.tableView visibleCells]) 
     { 
      if (![self _isUtilityRow:[self.tableView indexPathForCell:cell]]) 
      { 
       cell.selectionStyle = UITableViewCellSelectionStyleNone; 
      } 
     } 
    } 
    else 
    { 
     for (UITableViewCell* cell in [self.tableView visibleCells]) 
     { 
      if (![self _isUtilityRow:[self.tableView indexPathForCell:cell]]) 
      { 
       cell.selectionStyle = UITableViewCellSelectionStyleBlue; 
      } 
     } 
    } 
} 
+0

Tablonun düzenleme moduna geçtiğinde tabloyu yeniden yükleyebilir veya seçim stilini hiçbiri olarak seçilmeden seçildikten sonra satırın seçimini kaldırabilirsiniz ... – AMayes

cevap

0

Ben senin uygulamanın çalışma, ama belki bir yerde DataSource tanımında aşağıdaki faydalanmak deneyebilirsiniz emin değilim ilk seçim seviyesine, daha sonra ikinci seçim seviyesine filtre uygulayarak

+0

Bu çalışmalı. – CW0007007

İlgili konular