2010-05-10 52 views

回答

1

這不是你想聽到的答案,但沒有* :(

表視圖的代表將只能these methods迴應。

但是,(這是一個黑客攻擊的一位,但)動畫是約0.35秒長,你可以只調用performSelector:withObject:afterdelay:

*至少不像據我所知。

+0

這是可靠的/一致的嗎?如果運行循環延遲會發生什麼? – akaii 2010-05-11 10:59:04

+0

它一點都不一致 - 這有點破解!如果運行循環延遲,您將在動畫完成和您想要發生的任何動作之間暫停。 – deanWombourne 2010-05-11 11:25:59

4

其實,有DOES似乎是一個辦法d這(雖然不像它應該那樣直截了當!)。

雖然沒有直接訪問某種回調,但看起來UITableView動畫發生在CAAnimation內。因此,只需訪問CAAnimationcompletionBlock似乎可以給你想要的東西。

這裏就是我得到了2個動畫鏈在我UITableView子類:

#pragma mark - Section expanding/collapsing 
- (void)toggleSection:(NSInteger)index { 
    int expandedSection = [self ExpandedSection]; 
    if (expandedSection != NO_EXPANDED_SECTIONS_INDEX) { 
     [self beginUpdates]; 
     [self collapseSection:@(expandedSection)]; 
     [CATransaction setCompletionBlock:^{ 
      if (expandedSection != index) { 
       [self beginUpdates]; 
       [self expandSection:@(index)]; 
       [self endUpdates]; 
      } 
     }]; 
     [self endUpdates]; 
    } else { 
     [self expandSection:@(index)]; 
    } 
} 

的代碼在collapseSection:expandingSection:方法簡單地增加/刪除子節需要進行摺疊或展開。這裏的關鍵點在於,使用此代碼時,我終於可以摺疊一個子部分然後展開下一個子部分。之前,兩個動畫都同時發生,這在視覺上沒有吸引力。

我希望這可以幫助你!我經過很長一段時間的努力掙扎着,把我的頭撞到牆上,直到我發現它。

這是針對iOS 6.0編寫的。我也非常希望未來的一些版本能夠解決這個問題!

+0

這似乎是一個非常可行的解決方案。謝謝 – LightningStryk 2013-07-19 22:26:33