Tıklanabilir bölümlere sahip bir UITableview oluşturdum. Eğer, onlarainsertRowsAtIndexPaths: scrollToRowAtIndexPath: UITableView bölümlerinin yanlış gizlenmesine neden olur
- tıkladığında onlar görünümünün en onlarla
- tıklandığına bölüm parşömenlerini hücrelerini ortaya çıkarmak için "genişletmek".
Ben indexpaths/tümüne eklemek gerekli hücreleri silin ve sonra aşağıdaki kodla bunları eklemek hesaplamak: Seçilen bölümün Aşağıdaki bölümlerde gizli tek bir sorun var
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:pathsToOpen withRowAnimation:insertAnimation];
[self.tableView deleteRowsAtIndexPaths:pathsToClose withRowAnimation:deleteAnimation];
[self.tableView endUpdates];
[self.tableView scrollToRowAtIndexPath:[pathsToOpen objectAtIndex:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
. İlk ekran görüntüsü, tablo görünümünün nasıl görüneceğini gösterir. İkinci ekran görüntüsü, gerçekte nasıl göründüğünü gösterir. Eğer yukarı (böylece gizli bölümler ekran dışında) ve sonra tekrar aşağı kaydırarak
, gizli bölümler (bir kez daha görünür) geri getirilir. Bunun neden olduğu hakkındaki tahminim şudur:
Ekleme/silme animasyonları scrollToRowAtIndexPath
ile aynı anda gerçekleşiyor ve Tablo Görünümü'nü karıştırıyor. Eğer scrollToRowAtIndexPath
bölüm 3 & bölümlerini tamamlamamış olsaydım, ekran dışına çıkacaktı - ve böylece tablo bir şekilde ekran dışında olduklarını düşünüyor. UITableview, optimizasyon olarak ekran dışı olan hücreleri/bölümleri gizler. dispatch_after
ile scrollToRowAtIndexPath
'u 2 saniye olarak çağırırsam, 3 & 4 bölümleri doğru şekilde görüntülenir.
Sanırım bunun neden olduğunu biliyorum, ancak bu UITableview optimizasyonunu nasıl düzeltebileceğimi/geçersiz kılacağımı bilmiyorum. Aslında, scrollViewDidEndScrollingAnimation
uygular ve bu işlevde bir kesme noktası eklerseniz, uygulama 3 & 4 bölümlerini doğru görüntüler (ilk ekran görüntüsünü bu şekilde aldım). Ama bu fonksiyondan devam edince, hücreler kaybolur. Bölümler meşru UITableView bölümleri şunlardır:
tam proje here
ek uygulama ayrıntılarına indirilebilir. Tablo görünümüne bir temsilci geri çağrısı tetikleyen bir tapGestureRecognizer ekledim. Aşağıda, bölümleri açan tüm yöntem yer almaktadır.
- (void)sectionHeaderView:(SectionHeaderView *)sectionHeaderView sectionOpened:(NSInteger)sectionOpened
{
// Open
sectionHeaderView.numRows = DefaultNumRows;
sectionHeaderView.selected = YES;
NSMutableArray *pathsToOpen = [[NSMutableArray alloc] init];
for (int i = 0; i < sectionHeaderView.numRows; i++)
{
NSIndexPath *pathToOpen = [NSIndexPath indexPathForRow:i inSection:sectionOpened];
[pathsToOpen addObject:pathToOpen];
}
// Close
NSMutableArray *pathsToClose = [[NSMutableArray alloc] init];
if (openSectionHeader)
{
for (int i = 0; i < openSectionHeader.numRows; i++)
{
NSIndexPath *pathToClose = [NSIndexPath indexPathForRow:i inSection:openSectionHeader.section];
[pathsToClose addObject:pathToClose];
}
}
// Set Correct Animation if section's already open
UITableViewRowAnimation insertAnimation = UITableViewRowAnimationBottom;
UITableViewRowAnimation deleteAnimation = UITableViewRowAnimationTop;
if (!openSectionHeader || sectionOpened < openSectionHeader.section)
{
insertAnimation = UITableViewRowAnimationTop;
deleteAnimation = UITableViewRowAnimationBottom;
}
openSectionHeader.numRows = 0;
openSectionHeader.selected = NO;
openSectionHeader = sectionHeaderView;
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:pathsToOpen withRowAnimation:insertAnimation];
[self.tableView deleteRowsAtIndexPaths:pathsToClose withRowAnimation:deleteAnimation];
[self.tableView endUpdates];
[self.tableView scrollToRowAtIndexPath:[pathsToOpen objectAtIndex:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
Sanırım Apple tarafından sağlanan MVC'yi daha iyi kullanacaksınız. Yapmanız gereken tek şey veri kaynağınıza veri eklemek/çıkarmak ve tablo görünümü satırına dokunmamanızdır. – divol
Lütfen, bir indirme beklemekten ziyade, projenizde biraz daha fazla soru bulunmasını isteyin - örneğin, dizin yollarını nasıl hesaplarsınız? eklemek/kaldırmak ve "Bölüm X" şeyler bölüm üstbilgileri mi yoksa sadece hücreler mi? Projenizi indirmeye çok bağımlı olmasaydı, daha iyi bir bağımsız soruya yönelirdi. – jrturton
Sanırım senin de doğru. Satır sonundaki delege yönteminde satırları yeniden yüklemeyi deneyebilir misiniz? – jrturton