我正在尝试从UIView
内UIViewController
加载Storyboard
segue
而不UIViewcontroller
。我创建了Storyboard ID
,包含了所有内容,将其与特定类连接起来并设置了h.file
。我还将元素连接到我班级的subview
,现在我正在寻找一种方法来初始化UIViewController
segue
而不是UIViewController
。我一直在搜索并发现很多帖子以这种方式加载UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
pointVC = (PointsViewController *)[storyboard instantiateViewControllerWithIdentifier:@"PointsViewController"];
:
UIViewController
尝试添加这样的视图,视图会跳转到下一个pointVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:pointVC animated:YES completion:NULL];
:
addChildViewController
像[self addChildViewController:pointVC];
一样添加它也不起作用:
UIViews
初始化后,我尝试将特定UIViewController
内的UIViewController
之一添加到我的实际视图中,但它不起作用。如果我只使用前两行,则不会发生任何事情,UIViews
对象内部没有viewDidLoad
,因为永远不会调用UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
pointVC = (PointsViewController *)[storyboard instantiateViewControllerWithIdentifier:@"PointsViewController"];
[self addChildViewController:pointVC];
[self.view addSubview:pointVC.viewPointsDialog];
[pointVC didMoveToParentViewController:self];
。有什么想法吗?
{{1}}
答案 0 :(得分:1)
应该是
[self.view addSubview:pointVC.view];
而不是
[self.view addSubview:pointVC.viewPointsDialog];
所以最终的工作代码应如下所示:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
pointVC = (PointsViewController *)[storyboard instantiateViewControllerWithIdentifier:@"PointsViewController"];
[self addChildViewController:pointVC];
[self.view addSubview:pointVC.view];
[pointVC didMoveToParentViewController:self];
您可以在pointVC.view上使用setFrame来正确定位。
答案 1 :(得分:0)
首先,如果您使用
从故事板初始化UIViewController
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
pointVC = (PointsViewController *)[storyboard instantiateViewControllerWithIdentifier:@"PointsViewController"];
这只会初始化视图控制器,排序alloc/init
方法。因此,如果您尝试将视图添加为视图控制器视图的子视图,此时它将无法工作,因为视图控制器的视图尚未加载。您必须首先push/present/addChild
视图控制器,然后添加子视图。
其次,如果您创建了segues,只需使用performSegueWithIdentifier:
方法推送/显示视图控制器(有模态segue),并在您推送/呈现的视图控制器viewWillAppear/viewDidAppear
方法中添加subivew(不要在viewDidLoad
中执行,因为视图的框架可能尚未正确设置)。
第三,如果您使用自动布局,则可能必须检查约束并确保禁用从弹跳到自动布局的转换,因为addSubview
将启用该转换。
答案 2 :(得分:0)
元素全部为零的原因是仅在显示视图后才加载元素。您可以强制它加载元素。这对我有用:
UIViewController *vC =
[[UIStoryboard storyboardWithName:@"ViewControllers"
bundle:nil]
instantiateViewControllerWithIdentifier:@"MyViewController"];`
vC.view.frame = self.view.frame;
然后,您可以显示或显示视图:
[self presentViewController:vC animated:YES completion:nil];
我必须为从故事板加载的任何视图控制器执行此操作。如果从nib或xib文件加载视图控制器,则无需执行此操作。