Nasıl UİTableVİew ReloadData tamamlandığında söylemek için mi? | Netgez.com
SORU
17 NİSAN 2013, ÇARŞAMBA


Nasıl UİTableVİew ReloadData tamamlandığında söylemek için mi?

[self.tableView reloadData] gösteri bittikten sonra bir UİTableView altına kaydırmak için çalışıyorum

Ben aslında vardı

 [self.tableView reloadData]
 NSIndexPath* indexPath = [NSIndexPath indexPathForRow: ([self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1) inSection: ([self.tableView numberOfSections]-1)];

[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

Ama sonra kaydırma self.tableView, [self.tableView numberOfSections] [self.tableView numberOfRowsinSection 0 olduğu için olmaz o kadar reloadData uyumsuz olduğunu okudum.

Teşekkürler!

Garip olanı kullanıyorum

[self.tableView reloadData];
NSLog(@"Number of Sections %d", [self.tableView numberOfSections]);
NSLog(@"Number of Rows %d", [self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1);

= -1; konsol Bölümleri döner = 1, Satır

cellForRowAtIndexPath Bölüm = 1 ve Satır olsun aynı NSLogs ben ne zaman = 8; (8)

CEVAP
17 NİSAN 2013, ÇARŞAMBA


Yeniden çalıştırmak döngü (diyelim düğmesi eylemi ya da ne olursa olsun döndürür sonra) kontrol döndüğünüzde normal olur bir sonraki düzeni geçişi sırasında olur.

Sonra tabloyu bir şey çalıştırmak için, yeniden yükler sadece tablo görünümü düzeni hemen gerçekleştirmeye zorlamaktır görünüm:

[self.tableView reloadData];
[self.tableView layoutIfNeeded];
 NSIndexPath* indexPath = [NSIndexPath indexPathForRow: ([self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1) inSection: ([self.tableView numberOfSections]-1)];
[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

Başka bir yol düzeni daha sonra çalıştırmak için kod dispatch_async kullanarak planlamak için:

[self.tableView reloadData];
dispatch_async(dispatch_get_main_queue(), ^{
     NSIndexPath* indexPath = [NSIndexPath indexPathForRow: ([self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1) inSection: ([self.tableView numberOfSections]-1)];
    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
});

GÃœNCELLEME

Daha fazla araştırma üzerine, tablo görünümü reloadData dönmeden önce veri kaynağına tableView:numberOfRowsInSection: gönderdiği buluyorum. Eğer temsilci tableView:heightForRowAtIndexPath:, uygular tablo görünümünü de (her satır için) reloadData dönmeden önce gönderir.

Ancak, tablo görünümünü çalıştırın döngü denetimi döndüğünüzde varsayılan olarak gerçekleşen düzen aşamasına kadar tableView:cellForRowAtIndexPath: göndermez.

Ve ben de küçük bir test programı, söz konusu kod düzgün tablo görünümü, aşağıya sürüklerolmadanözel bir şey (layoutIfNeeded gönderme dispatch_async kullanma gibi) ben yapıyorum.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • Android Developers

    Android Deve

    9 Kasım 2007
  • iNCH

    iNCH

    20 Temmuz 2009