2010-11-09 53 views
0

我完全失去了superview,loadView(),viewDidLoad(),viewWillAppear()。最終,我想將我的控制器的框架設置爲superview的邊界,並在我的viewDidLoad()中使用[self.view bounds]。 (也許這是不可能的?)如何以編程方式創建視圖並根據超級視圖設置其框架? (iphone)

這裏的代碼片段,讓我的悲傷..

// add the controller's view to the scroll view 
if (nil == controller.view.superview) { 
CGRect frame = scrollView.frame; 
    frame.origin.x = frame.size.width * page; 
    frame.origin.y = 0; 
    controller.view.frame = frame; 
    [scrollView addSubview:controller.view]; 
    // I'd like to set controller.view 's frame using superview(scrollView here). 
} 

顯然,零== controller.view.superview調用控制器的viewDidLoad。

我曾經訪問[self.view界限],如果加上它的SuperView後使用我的viewDidLoad
內因爲我想設置視圖的框架,我想我需要移動使用[self.view範圍代碼]到別的地方。
轉移到什麼地方? 還是有更好的方法?

回答

0

第一次調用controller.viewself.view會自動爲每個視圖控制器(我假設self是不同的視圖控制器)觸發視圖加載機制和viewDidLoad通知。因此,每個控制器的viewDidLoad方法將在此代碼片段的開頭被調用。

loadView是您手動覆蓋視圖加載過程的方法。你不應該直接調用它)

+0

啊謝謝,應該是controller.view,我搞砸了。我編輯了我的問題。總之,我可以使用它的超級視圖來設置視圖的框架,並在viewDidLoad被調用的時候使用[self.view bounds]? – eugene 2010-11-09 11:17:11

0

我來總結一下這個問題,我的解決辦法。

問題實質上是兩個函數調用的順序:viewDidLoad和addSubview無法切換。

我想要的是,
根據superview只能在addSubview之後設置子框架。
但與此同時,在viewDidLoad上,我有適當的[self.view界限]。

由於viewDidLoad必須在addSubview之前調用,因此viewDidLoad將無法擁有正確的[self.view bounds]信息。

解決方案, 我聲明瞭一個superViewBounds變量,並在分配視圖控制器之後但在創建視圖之前設置它們。並使用viewDidLoad中的邊界變量。

有一件事仍然存在,我仍然不知道如何獲得navigationViewController的主視圖(我認爲它被稱爲導航視圖)界限/框架信息。

希望它有幫助,並希望有人發佈更好的解決方案,如果有的話。

相關問題