2010-06-21 84 views
9

我有以下代碼來創建一個視圖,並把它在滾動視圖允許分頁
的代碼工作正常但是我無法做的是加載從筆尖文件如何在xcode中創建一個nib文件的視圖?

意見換句話說 我想使用「initWithNibName」而不是「initWithFrame」?

- (void)createPageWithColor:(UIColor *)color forPage:(int)page 
    { 
    UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 300,400)]; 
     newView.backgroundColor = color; 
    [scrollView addSubview:newView]; 
    } 

非常感謝

+0

如果你是做這種方式(和,不這樣做,但如果你),你要記住了'添加到'scrollView'後的[newView release]。你的scrollView會在添加視圖時保留視圖,所以它不再屬於你。 – 2010-06-22 12:39:08

回答

14

我認爲你缺少的是你可以在加載筆尖後設置新UIView的框架。加載/初始化時間不是你唯一的拍攝。我也在下面的代碼中將加載函數分解爲它的代碼片段,以便您可以更輕鬆地看到發生了什麼。

觀察:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"yournib" 
                owner:self 
                options:nil]; 
//I'm assuming here that your nib's top level contains only the view 
//you want, so it's the only item in the array. 
UIView *myView = [nibContents objectAtIndex:0]; 
myView.frame = CGRectMake(0,0,300,400); //or whatever coordinates you need 
[scrollview addSubview:myView]; 

不要忘了爲UIScrollView的實際滾動,你需要它的contentSize屬性設置爲裏面的貨物的大小,這可能比.frame財產做大滾動視圖本身。

+0

那就是我所說的:) 謝謝丹,你的解決方案完美的工作,是的,我已經改變了像scrollView.frame.size這樣的scrollview視圖的位置。寬度*頁面「的x協調員 再次感謝您,讓我的一天:) – ahmed 2010-06-22 13:45:10

3

嘗試像這樣(改編自 「iPhone的開發者食譜」,第174):

UIView *newView = [[[NSBundle mainBundle] loadNibNamed:@"yournib" owner:self options:nil] lastObject]; 

這在你的.xib假設一個單一的視圖對象,但如果你的.xib更復雜,你可以修改它。

+0

偉大的約翰,但我需要指定newView的位置,因爲我將它添加到滾動視圖 – ahmed 2010-06-22 12:15:04

+0

評論了一些@John N錯過了,但我錯過了他沒有錯過它。所以沒關係! – 2010-06-22 12:31:50

20

我知道這是一箇舊帖子,但我想創建一個UIView作爲一個單獨的文件,並添加一個xib,所以我可以在我的應用程序的幾個地方使用它(幾乎就像使用它作爲自定義表視圖單元格) 。我無法完全理解,但這篇文章幫助我達到了我想要的結果。

如果有人想這樣做同樣的方式,使公正,這是我做的:

將此添加到您的UIView的.m文件的初始化代碼:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil][0]; 
    if (self) 
    { 
     self.frame = frame; 
    } 
    return self; 
} 

然後在界面生成器/ xib編輯器,您必須指定您爲UIView創建的類,以便您可以添加IBOutlets。

希望它可以幫助別人,因爲它花了我一點!

+0

謝謝@Matt W. – Meet 2012-07-31 08:40:59

+2

沒有必要做一個新的CGRect,你可以簡單地做'self.frame = frame' – 2012-12-07 19:04:06

+0

太棒了!很棒的解決方案! – bbrame 2013-06-14 18:14:31

-1

您可以使用我的簡單類https://github.com/ulian-onua/KRNNib通過一個方法調用從nib文件創建視圖。
例如,你可以在接下來的方式使用KRNNib:

UIView *view = [KRNNib viewFromNibWithName:@"TestView"]; 
[self.view addSubview:view]; // add instantiated view as subview to view of current UIViewController 
相關問題