2012-03-30 32 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];