2010-06-30 114 views
1

我有一個自定義UITableViewCell。它有一個UIView,它被添加到UITableViewCell的「contentView」中。對於任何更新,我通過調用其「setNeedsDisplay」並實現UIView的「drawRect」方法中的繪圖來重繪UIView自定義UITableViewCell和UIView的LayoutSubviews

UITableViewCell覆蓋「willTransitionToState」並根據位掩碼值,要求重繪UIView。因爲我要求UIView重新繪製自己,每次我做一個「滑動刪除」,我看到細胞「閃爍」一會兒;即使是由於刪除按鈕而沒有移動位置的文本也會因爲一切正在重繪而發生閃爍。

我知道,一個可能的解決方案是不是從「willTransitionToState」呼「setNeedsDisplay」中的UIView,而是稱之爲「setNeedsLayout」,並有UIView的實施「layoutSubviews」。

這是我被困在:我怎樣才能重新佈局我UIView,因爲我UIView爲「繪製」(我用「drawInRect」和字符串和圖像「drawAtPoint」方法)裏面的一切。在右側出現一個字符串,當「刪除」按鈕出現時(例如iPhone中的消息應用程序),我想隱藏該字符串。

我該如何做重新佈局而不是重新繪製?

謝謝!!!

回答

2

我認爲您的方法存在問題。而不是繪製所有內容,最好在init方法或NIB中設置子視圖。

willTransitionToState方法中,根據狀態轉換更新任何子視圖。

layoutSubviews中,根據需要更新每個子視圖的來源和大小。

以下是willTransitionToState文檔中的一些細節。雖然,我相信你已經看到了這一點:

UITableViewCell的子類可以實現此方法,以便在更改狀態時爲單元格添加其他更改。每當單元在狀態之間轉換時(例如從正常狀態(默認)轉換爲編輯模式),UITableViewCell都會調用此方法。自定義單元格可以設置和定位以新狀態顯示的任何新視圖。然後單元接收一個layoutSubviews消息(UIView),在這個消息中它可以將這些新視圖定位在它們的最終位置上以獲得新狀態。重寫此方法時子類必須始終調用super。