2013-04-10 62 views
0

我使用的是這樣的:
VC = [[SettingsViewController alloc] initWithNibName:nil bundle:nil];實例化視圖從代碼控制器 - 當是viewDidLoad中所謂的iOS

viewDidLoad中尚未調用。
但是當我做:
VC.view.frame = CGRectMake(...);

此時viewDidLoad中被調用。

但問題是,我在上述代碼語句中傳遞的視圖尺寸未在viewDidLoad方法中使用。
我認爲它看到正在使用視圖,所以是時候加載視圖,並且在加載視圖之後,它必須將視圖的框架尺寸分配給視圖。但是,如果我想viewDidLoad之前設置視圖尺寸被調用,這樣我就可以在viewDidLoad方法使用這些尺寸..
喜歡的東西initWithFrame..

而且,我也沒有在視圖控制器的視圖尺寸。我必須從VC外部分配視圖尺寸。
因此,可能在調用initWithNibName:bundle:方法後,我可以將視圖框架尺寸保存在某個變量中..但這看起來不是一個乾淨的解決方案,是嗎?

+2

在SettingsViewController中,您可以創建一個帶有CGRECT對象的新的init方法。 – JDx 2013-04-10 08:59:10

+0

@JDx哦,是啊!應該工作的課程 – neeraj 2013-04-10 09:01:31

+0

即便如此,viewDidLoad也不會有新的維度。每當我嘗試分配新尺寸時,它都會首先加載視圖,然後分配尺寸 – neeraj 2013-04-10 09:05:25

回答

2

你可以做這樣的事情:

在接口

@interface SettingsViewController : ... { 
    CGRect _initialFrame; 
} 

... 

- (id)initWithFrame:(CGRect)frame; 

@end 

在實施

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithNibName:nil bundle:nil]; 
    if (self) { 
     _initialFrame = frame; 
    } 

    return self; 
} 

- (void)viewDidLoad 
{ 
    self.view.frame = _initialFrame; 

    [super viewDidLoad]; 
} 

,然後從類使用這些控制器:

VC = [[SettingsViewController alloc] initWithFrame:CGRectMake(...)]; 
+0

是的,這是我所說的,這似乎是最好的出路。 – neeraj 2013-04-10 09:07:03

3

viewDidLoad在視圖加載時調用。 (驚喜)

所以在你撥打VC.view的時候,在它返回之前,viewDidLoaded會被執行,然後視圖被返回,並設置框架。

所以從目前的做法,這是不可能

無論如何,你爲什麼需要在viewDidLoad視圖幀?也許你可以說一部分進入viewWillAppear/viewDidAppear這是隻有被​​調用時,認爲即將出現

+0

目前我只做 – neeraj 2013-04-10 09:03:34

+0

@neeraj在做什麼?是什麼原因,你必須知道'viewDidLoad'中的視圖框架,並且不能將這些代碼移動到'viewWillAppear' /'viewDidAppear' – 2013-04-10 09:07:00

+0

我已經將它們移動到了那裏。我只是好奇而已。也許有一天我只想做一次,而不是每次看到或消失的時候,那麼我將不得不爲這個目的保留一個標記 – neeraj 2013-04-10 09:08:50

相關問題