我在Interface Builder中创建了一个视图,其中一些标签和文本为IBOutlets。当我从我在Storyboard中定义的另一个视图中删除它时,我可以完美地查看此屏幕。 但是,我有另一个XIB和一个关联的UIViewController,我想从中访问该视图。因为我的XIB不在故事板中,所以我不能理解它。相反,我必须以编程方式执行转换。
PlantDetailViewController *plantDetailVC = [[PlantDetailViewController alloc] init];
[self.currentNavigationController pushViewController:plantDetailVC animated:YES];
执行此代码时,它会转换到视图,但视图只是空白。我已经调试了代码,它进入了viewDidLoad和viewWillAppear但是我所有的IBOutlets都是NIL ....所以它没有显示在屏幕上!
任何人都可以告诉我为什么他们可能是NIL以及我如何初始化它们?
由于
布赖恩
答案 0 :(得分: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];
答案 1 :(得分:0)
-init
无法为您加载nib文件,如果您要加载nib使用-initWithNibName:bundle:
如果您使用nib命名约定,则可以传递nil
以加载名称与您的类和默认包匹配的nib,即[[PlantDetailViewController alloc] initWithNibName:nil bundle:nil]
,有关详细信息,请参阅-nibName
的文档。