2012-05-30 41 views
6

我已經搜索了很多,並通過幾本教科書挖掘出來,但是我真正感謝的是在iOS應用程序中定義UIView子類的最佳實踐的簡單解釋。在哪裏以編程方式構建視圖vs使用筆尖

  • 如果使用xib,我可以在運行開始時在哪裏添加/調整控件?
  • 如果以編程方式構建,我應該在ViewController(loadView?)還是單獨的UIView子類中執行此操作?如果後者,我如何指定它的文件的owener,以便如果它被添加爲子視圖,它知道它的控制者是誰?
  • 你在awakeFromNib,loadView,viewDidLoad,UIView.init,UIViewController.init等中放置了什麼?
  • 你經常使用哪些其他方法?

我不需要超級特定的指令 - 我更多地尋找一個快速參考指南,它解釋了每種可用方法中生活的代碼類型。

回答

5

我的做法是:

  • 創建自定義的UIView在單獨的文件子類。
  • 在UIViewController的初始化創建所有非UI對象
  • 在UIViewController的的loadView創建我的自定義的UIView,並將其設置爲self.view控制器在UIViewController的viewDidUnload
  • (調用時內存警告)釋放所有UI組件(我的自定義UIView)
  • in UIViewController's dealloc釋放所有非UI對象

在我的自定義UIView子類我:

  • 初始化方法創建所有子視圖和layoutSubviews釋放它在的dealloc
  • 我設置的子視圖這種方式來保證的框架,僅在更改時才設置框架。這是因爲子視圖的重繪是昂貴的:
if (!CGRectEqualToRect(__subview.frame, rect)) { 
    __subview.frame = rect; 
} 

這是我在所有UIViewControllers做。我不使用IB,一切都以編程方式創建。

希望它有幫助!

+0

我想這是有點主觀的,但幾個月後,這最接近匹配我在做什麼,並很好地工作。 –

4

如果使用xib,我可以在哪裏添加/調整 運行時開始處的控件?

在視圖控制器的viewDidLoad

如果以編程方式構建,我應該在ViewController (loadView?)或單獨的UIView子類中執行此操作嗎?如果後者,我如何 指定它的文件的owener,以便如果它被添加爲子視圖 知道誰的控制器是?

同樣,我總是在我的視圖控制器的viewDidLoad中執行此操作。

你在awakeFromNib,的loadView,viewDidLoad中,UIView.init放置什麼, UIViewController.init等?

其中,我只擔心viewDidLoad

您經常使用哪些其他方法?

  1. 確保您使用自動調整大小面具爲您手動創建的控制,以確保他們妥善處理用戶界面的方向。

  2. 永遠不要假設(儘可能多),你的屏幕是320pt寬。請務必參考self.view.size,您需要當前視圖的大小。

  3. 如果您的控件無法通過自動調整大小遮罩處理用戶界面方向更改,請務必使用iOS 5的viewWillLayoutSubviews來調整它們。

0

有一些非常簡單的筆尖,如典型的MainWindow.nib,它們沒有本地化的內容,可以用一行代碼進行復制。在這種情況下,代碼比取消存檔筆尖要快得多。

也有高度動態的佈局,這是不可能描述爲筆尖。

您應該在每個特定情況下選擇最方便和有效的方式。總是會有權衡,只需明智地選擇。

相關問題