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

  • DrePwn

    DrePwn

    22 Temmuz 2011
  • GavinMichaelBooth

    GavinMichael

    26 AĞUSTOS 2006
  • Mary Jane Tauyan

    Mary Jane Ta

    20 AĞUSTOS 2009