我正在使用UITableView來顯示一系列計算的結果。當用戶點擊「計算」時,我將最新結果添加到屏幕上。當添加了新的小區時,UITableViewCell
對象被添加到陣列(其由tableView:cellForRowAtIndexPath:
索引),然後我用下面的代碼來添加這個新行什麼是顯示在屏幕上:添加單元格和使用UITableView滾動時出現圖形故障
[thisView beginUpdates];
[thisView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation: UITableViewRowAnimationFade];
[thisView endUpdates];
這導致顯示新的單元格。但是,我想立即滾動屏幕,以便新的單元格是屏幕上最下面的單元格。我使用下面的代碼:
[thisView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
這幾乎的偉大工程。但是,第一次添加和滾動單元格時,它僅在消失之前短暫地出現在屏幕上。視圖向下滾動到正確的位置,但單元不在那裏。用手滾動視圖,直到這個看不見的新單元格的位置在屏幕外,然後再返回,導致單元格出現 - 之後它的行爲正常。這隻會在第一次添加單元格時發生;後續的單元不存在這個問題。它也會發生,無論scrollToRowAtIndexPath
和insertRowsAtIndexPath
動畫設置的組合如何。
編輯: 現在我已經開始在表的第二個到最後位置插入細胞,而不是結束,問題仍然存在 - 第一次插入時,一個單元是「隱形」直到它離開屏幕並再次返回。有什麼可能導致這種情況,我怎麼能強制細胞一旦被添加到表中繪製?
我的表的行被保存在嵌套數組中。外部NSMutableArray包含每個部分的一個內部NSMUtableArray。每節NSMutableArray包含該節的單元格。'numberOfSectionsInTableView:'返回節數組的數量,'tableView:numberOfRowsInSection:'返回相關節數組中的單元數。 'cellForRowAtIndexPath'使用段和行號在我的數組結構中找到相關的行,並返回它。 – 2010-05-02 17:31:11
我不想看到幾行,更不用說幾十行了。我會研究重新設計,但我也希望有一個短期解決方案。 – 2010-05-02 23:07:41
短期內,您必須確保數據源在返回段和行數時反映結果單元格的添加。在將單元添加到數據數組後,我會調用' - [UITableView reload]'。這應該會導致tableview更新自己的適當數量的部分和行,這將讓它正確顯示自己。然而,你總是會遇到這種設計方面的麻煩,並且總是會帶來很多額外的工作。 – TechZen 2010-05-03 15:01:11