2011-01-09 19 views
3

我有一個自定義UIView這是一個UITableViewCell的子視圖。當單元格被繪製時,我的自定義視圖也正確地調用drawRect:在我的UIView子類中。當單元格重新加載時,視圖被正確繪製(調用drawRect:)。爲什麼我調用setNeedsDisplay後,我的UIView子類不能重繪?

當某個事件發生時(例如計時器),我想重畫視圖而不必重新加載整個單元格。 (這不是單元格中的唯一視圖。)

但是,當我在我的子視圖上調用setNeedsDisplay時,沒有任何反應。

我猜測,當我的觀點的drawRect:被調用時,所產生的圖像在支持緩存的地方,這樣當我打電話setNeedsDisplay是後盾重繪屏幕,但我drawRect:呼叫不會被再次調用。

爲什麼drawRect:在單元格創建後從未再次調用?

編輯:單元格的子視圖是從筆尖創建的。即:從筆尖加載UIViewController,並將其視圖添加到UITableViewCell。

我從零開始創建了一個自定義視圖(由代碼創建)的測試用例,它按預期工作:setNeedsDisplay導致調用drawRect:。它必須是在.xib文件中設置的東西,或者是從nib加載時發生的與視圖不同的事情。

+0

你是否從主線程調用setNeedsDisplay?你確定你把它發送到正確的視圖(即如果從單元格完成,應該沒問題,但是當完成時可能很容易做錯*某個地方*單元已被替換(即通過滾動)。 – Eiko 2011-01-09 10:24:19

回答

1

我剛碰到同樣的問題。對我來說,這是我的XIB的一個問題 - 雖然我繼承了UIView,所以相應地進行了修改。我在IB的錯誤是我將控件附加到「文件的所有者」,而不是將它們附加到UIView。我敢肯定,在我的經驗不足的情況下會有更大的發展 - 也許有更多經驗的人可以詳細闡述。

希望有幫助!

相關問題