2012-03-30 54 views
3

我已經在界面生成器中創建了一些視圖,其中一些標籤和文本爲IBOutlets。當我從我的故事板中定義的另一個視圖中繼續觀看時,我可以完美地查看此屏幕。 但是,我有另一個XIB和一個關聯的UIViewController,我想從中訪問該視圖。因爲我的XIB不在故事板中,所以我無法繼續使用它。相反,我必須以編程方式執行轉換。iOS - 界面生成器插座未初始化

PlantDetailViewController *plantDetailVC = [[PlantDetailViewController alloc] init]; 
    [self.currentNavigationController pushViewController:plantDetailVC animated:YES]; 

當執行此代碼時,它轉換到視圖,但視圖只是空白。我調試了代碼,它進入viewDidLoad和viewWillAppear但是我所有的IBOutlets都是NIL ....所以沒有任何東西出現在屏幕上!

任何人都可以告訴我爲什麼他們可能是零,我如何初始化它們?

感謝

布賴恩

回答

0

-init不會加載你的筆尖文件,如果要加載筆尖使用-initWithNibName:bundle:

如果你用筆尖命名約定,你可以通過nil加載名稱與您的班級和默認包相匹配的筆尖,即[[PlantDetailViewController alloc] initWithNibName:nil bundle:nil],詳情請參閱文檔-nibName

+0

感謝您的答覆約拿。但是,我沒有NIB的觀點,我想加載。該視圖是在Storyboard中定義的,並且據我所知,Storyboard中沒有NIB文件。如果我錯了,請核心我。 – 2012-03-30 01:08:36

+2

調用'UIViewController'的'init'方法與調用'initWithNibName:nil bundle:nil'相同。如果有一個與視圖控制器類相同名稱的筆尖(或者末尾沒有「Controller」字樣的相同名稱),則視圖控制器將在'loadView'中加載該筆尖。 – 2012-03-30 03:11:11

2

聽起來好像你說你的故事板中有一個PlantDetailViewController設置,還有一些OtherViewController是在故事板以外創建的。現在您需要OtherViewController來實例化在故事板中設置的PlantDetailViewController

假設您的故事板名爲MainStoryboard.storyboard

首先,您需要在故事板中設置PlantDetailViewController的標識符。您可以在「屬性」檢查器中的「視圖控制器」部分下執行此操作。假設您將其設置爲PlantDetail

然後,在OtherViewController,這應該工作:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
PlantDetailViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"PlantDetail"]; 
[self.currentNavigationController pushViewController:vc animated:YES];