2011-05-19 97 views
0

我有一個筆尖文件我試圖在代碼中實例化。我的UIViewController的主視圖也是從nib文件加載的。筆尖自動添加到屏幕

這裏是我的UIViewController的viewDidLoad方法:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UINib *nib = [UINib nibWithNibName:@"MyCustomView" bundle:nil]; 
    NSArray *nibViews = [nib instantiateWithOwner:self options:nil]; 
    MyCustomView *myView = [nibViews objectAtIndex:0]; 
    myView.frame = CGRectMake(100.0f, 100.0f, 91.0f, 91.0f); 
    [self.view addSubview:myView]; 
} 

這就造成某種無限循環的。如果我註釋掉[self.view addSubview:myView],myView會出現,但屏幕上當前的所有內容都將消失。我不認爲instantiateWithOwner將視圖添加到屏幕上。如果有,我該如何獲得它?

感謝您的幫助。

+0

你是否在Interface Builder以及代碼中聲明XIB名稱?我認爲如果你這樣做會得到一個警告,但它會被編譯。 – 2011-05-19 00:07:26

+0

我的.h/.m文件(用於筆尖的代碼)和筆尖都具有相同的名稱。它基本上是這樣的:MyCustomView.h,MyCustomView.m,MyCustomView.xib。儘管這不是問題,但它似乎是人們做這件事的一般方式。 – Quentamia 2011-05-19 04:13:11

+0

這不是我的意思。在您的MainWindow.xib中,如果您已將自定義視圖設置爲視圖控制器(這是執行此操作的一種方式)。然後,你應該添加一個子視圖與你的筆尖。你會最終得到一個無限循環的子視圖這樣做。 – 2011-05-19 08:42:58

回答

0

instantiateWithOwner方法重新分配視圖控制器的屬性(從創建控制器的nib設置)到新的nib的屬性。這些屬性可能包含view屬性,因此其中的方法包含對setView:的調用,並將視圖控制器的視圖設置爲新的nib視圖。之後,您嘗試將視圖添加爲自己的子視圖,這自然會導致問題。

您想創建自己的屬性,例如secondaryView,將nib的視圖設置爲該視圖,並將其添加爲子視圖。您不想重新分配視圖控制器的視圖。

+0

我不明白你的意思是「設置筆尖的視圖」。我無法在Interface Builder中將nib的視圖設置爲UIViewController中的屬性,除非該視圖控制器是我的nib的文件所有者。沒有重寫我的視圖控制器的當前視圖沒有辦法實例化一個筆尖? – Quentamia 2011-05-19 04:12:01

+0

將nil傳遞給'instantiateWithOwner:options:'這兩個參數。 – executor21 2011-05-19 04:26:31

+0

我知道它的工作。謝謝你的幫助! – Quentamia 2011-06-08 15:40:21