2013-04-23 49 views
0

我有幾個UITextView s在幾個ViewController s。在過去,當我有幾個需要自定義繪圖的實例時,我需要在擁有UI對象的VC內部調整viewWillAppear中的繪圖。這一次,我將需要定製幾個實例。什麼是更有效率,重寫drawRect或使用viewWillAppear

只需創建一個子類別UITextView並在drawRect中包含繪圖代碼,而不是將相同的繪圖代碼分佈在幾個VC的範圍內,這樣更合適。我主要擔心表演。代碼可維護性雖然是次要的問題。

需要明確的是,這是我會在drawRect中使用:

- (void)drawRect:(CGRect)rect { 
    self.layer.cornerRadius = 10; 
    self.clipsToBounds = YES; 
} 

所以進一步檢查之後,initWithFrame不會被調用,但initWithCoder一樣。我也發現initWithCoder被調用一次,所以drawRect。在我的使用情況下(在小區的UITextView一個StaticCellTableView,將區別是什麼呢?

回答

3

可以包括2線init或利用initWithCoder(如果它的子類的UITextView的廈門國際銀行或情節串連圖板)的方法。 基本上,這只是對象的屬性 - 不需要每次UIView需要刷新時自行運行。

+0

我試圖把繪圖代碼放在' - (id)initWithFrame:(CGRect)frame'中,但是沒有被調用。我也嘗試覆蓋'init',但那也沒有被調用。 – 2013-04-23 14:22:17

+0

你如何加載UIView?的.xib /故事板?如果是這樣 - > initWithCoder – 2013-04-23 14:29:27

+0

我使用Storyboard加載它。我發現initWithCoder可以工作,但是通過測試,調用的次數與drawRect的調用次數相同。那麼使用兩者之間會有什麼區別呢? – 2013-04-23 14:31:14

0

創建一個ViewController基類,然後用它作爲所有其他VC的超類。然後添加這個和其他方便的方法來分享它的財富

在這個特殊的情況下,把它放在viewDi的末尾dLoad將會是一個好地方,因爲它只會被髮送一次,其中viewWillAppear可能會被多次調用。如果你使用viewdidLoad,代碼將被執行一次。

+0

不是所有的VC都會有一個'TextView',並不是所有具有'TextView'的VC都會有相同的命名'TextView'。也許我誤解了你的答案。 – 2013-04-23 14:23:29

+0

我發現你寧願將每個文本視圖的子類都比添加一個輔助方法到一個基類,它只需要一個textview作爲唯一參數,然後進行所需的更改。我所做過的每一個iOS應用都使用了一個BaseViewController子類,我們在這裏放置了這樣的通用功能。 YMMV – 2013-04-23 16:42:08

+0

我所要做的就是告訴'TextView'它是什麼類,就是這樣。由於不是所有的VC都會有'TextView',我已經有了一個用於我的VC的Base類(它們都有一個動態的背景視圖),所以我發現看看我是否有一個'TextView'特別是VC,然後執行'layer.cornerRadius'調整。看起來,創建UITextView子類更容易,然後僅告訴IB中的對象它是什麼類。 – 2013-04-23 19:00:58

0

我不會把這些行放在視圖的drawRect中,因爲每次刷新都會調用這些行。我建議你子類UITextView並將這些行添加到自定義init方法。

相關問題