2012-10-29 33 views
1

我有一個從xib文件加載的UIView子類。在我CustomView.h文件,我根本不理會在initWithFrame中的CGRect參數:方法:實例化從xib加載的UIView子類

- (id)initWithFrame:(CGRect)frame { 
    self = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:nil options:nil] objectAtIndex:0]; 
    return self; 
} 

現在我的問題是這樣的:每當我實例化我的自定義視圖,什麼是我應該傳球的框架?

舉例來說,我嘗試這樣做:

CustomView *cv = [[CustomView alloc] initWithFrame:CGRectZero]; 

人們會認爲,因爲框架是在廈門國際銀行成立,也不會不管是什麼在這裏通過。但是,這會導致我的自定義視圖對用戶交互無響應。

+0

這並不是多麼loadNibNamed作品。我很驚訝這不會導致崩潰。返回類型是根級對象的NSArray。如果你真的想要一個對象來使用它們,你必須設置一個所有者。附:不要這樣做,這太奇怪了。 – borrrden

+0

什麼是更好的方法?你能詳細說明嗎?你還可以在xib中創建一個自定義視圖,並在視圖控制器中使用它? –

+0

你不必擔心。這是XIB文件的要點。你通常實例化一個*視圖控制器*而不是*視圖*。您可以使用initWithNibName:bundle創建一個視圖控制器:您可以在XIB中更改視圖的類。如果你不知道如何,那裏有很多信息供你學習。之後,如果你想要一些自定義初始化,你可以重寫initWithCoder:如下面的答案。 – borrrden

回答

-1

你應該使用的initWithCoder代替

- (id)initWithCoder:(NSCoder*)coder { 
    self = [super initWithCoder:coder]; 
    if (self){ 
     // Initialization code 

    } 
    return self; 
} 
+0

你能給我一個initWithCoder和UIViews的例子嗎? –

+0

你能稍微詳細解釋一下你正在嘗試做什麼嗎?有幾種方法可以在Cocoa中加載視圖,最好的方法取決於你的應用程序的結構和你需要做什麼。 – amirfl