2011-10-18 24 views
33

Tabloda birçok veri ve çok fazla satır var. Veri değiştiğinde Ekrandaki görünür hücreleri güncellemek istiyorum, gerçekten pahalı bir çağrı olduğu için reloadData kullanmak istemiyorum.iOS - UITableView yenileme tablosu uygun şekilde mi?

Sadece görünen hücreleri güncellemek mümkün mü? Arama yapmayı denedim: beginUpdate & endUpdate masanın üstünde, ancak bu her zaman işe yaramıyor mu?

Herhangi bir öneriniz var mı? Şunları yapabilirsiniz

+0

Emin reloadData olduğunu misiniz pahalı? Değişken yükseklikleri kullanmıyorsanız, oldukça ucuz olmasını beklerdim. Tabloda kaç bölümünüz olduğunu, her bölümde kaç satır olduğunu ve önbelleğini temizleyeceğini sorgulayacağız. Ancak hücreler talep üzerine yeniden yüklenecek, bu da sadece görünen hücrelerin yeniden yüklenmesi gerektiği anlamına geliyor. –

+0

Tüm _visible_ hücrelerini yenileyecekseniz, reloadData ** bu ** pahalı olmamalıdır. – Nevin

+0

@StevenFisher Evet, benim durumumda çok pahalı, hücrelerin gerekli yüksekliği ve bazı web aramaları gibi birçok hesaplama var. Bu yüzden muhtemelen benim durumum için pahalı olduğunu söylemeliydim. – aryaxt

cevap

86

:

[tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] 
       withRowAnimation:UITableViewRowAnimationNone]; 
+0

çok güzel, teşekkürler. Bu, tek bir hücreyi yeniden yükleme söz konusu olduğunda özel olarak mükemmel bir çözümdür. – aryaxt

+0

Kullanıcı daha sonra bu çağrı yapıldığında görünmeyen bir hücreye ilerlerse ne olur? tahmin ettiğim tarih bilgisini görecek mi? – dancl

+2

Görünmeyen hücreler veriyle doldurulmaz. Ekrana geldiklerinde, tablo görünümündeki veri kaynağı geri bildirimleriyle doldurulurlar. –

-1

Eğer veri kaynağından modeli silmek hemen sonra, 'deleteRowsAtIndexPaths', UITableView bir yöntemi çağırmak deneyin. Örneğin, düzenleme modunda bir satırı siliyorsanız, aşağıdaki kod gibi bir şey yazabilirsiniz. Not ilk satırı deyimi veri kaynağından nesneyi kaldırır ve ikinci satır tablosunu temizler 'eğer': Swift 3 için

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    if (editingStyle == UITableViewCellEditingStyleDelete) { 

     [[[[[ItemsStore sharedStore] parameterArray] objectAtIndex:indexPath.section] objectForKey:@"data"] removeObjectAtIndex:indexPath.row]; 

     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

    } 
} 
0

:

tableView.reloadRows(at: tableView.indexPathsForVisibleRows!, with: .none) 
İlgili konular