我想做一些像UITabBarController这样的事情。UITabBarController具有属性viewControllers,我可以在其中添加UIViewController *实例。我试着用我自己的VC做同样的思考:
@property (nonatomic, copy) IBOutletCollection(UIViewController) NSArray *viewControllers;但这不管用。对我们来说可能吗?
编辑1.
Ramshad贴出了适当的样本,但使用了XIB。我想用故事板来实现它。
编辑2 -在赏金的末尾.
我质疑vaderkvarn的帖子,因为在UITabBarController的情况下,它是有效的。另外,正如Ramshad所指出的,这是有可能的。到目前为止,达斯宾肯莱特的文章是最正确的,但没有回答这个问题。我认为这个问题是公开的,因为我们会知道它是否对我们是有限制的,或者是什么方式。
PS:为什么会被否决?
发布于 2012-12-09 14:18:46
出口集合解决方案不能工作的原因是视图控制器不是出口。来自文档
出口是一个用符号IBOutlet注释的属性,它的值可以在nib文件或故事板中以图形方式设置。
视图控制器不是图形对象。
如果您想使用IBOutletCollection,您应该只使用一个视图控制器,并将视图放在集合中。
但是,如果您希望每个视图都有一个控制器,则需要采用一种更程序化的方法。一个带有视图控制器的数组可能是一个好的开始,但我不能说,因为我不知道您想对它们做什么。
编辑:
说得更清楚一点,因为你似乎不明白我的意思:
不,这不一定是一种方式。一个故事板不是一个API,它是一个图形化的工具,用于绘制场景和图表。它是专门为诸如基于Tab的应用程序设计的。
如果您右键单击您的Storyboard文件并选择“作为->源代码打开”,您将看到Tab Bar Controller具有其他视图控制器没有的特殊元素。在Storyboard文件中处理XML是我力所能及的。
如果您想使用Nib文件,请使用Ramshads应答。
如果你想尽可能接近故事板,那就用百叶窗回答吧。
但你的问题的答案(据我所知)是否定的,没有办法用故事板来完成这个任务。如果是的话,它就会被记录下来,而事实并非如此。
发布于 2012-12-11 17:17:27
虽然看起来您无法将UIViewController连接到IBOutletCollection(或者对使用它们设置了太多的限制),但是有一个简单的解决方案可以在使用故事板时工作。这段代码进入您的viewDidLoad方法:
_viewControllers = [NSArray arrayWithObjects:
, [self.storyboard instantiateViewControllerWithIdentifier:@"Controller1"]
, [self.storyboard instantiateViewControllerWithIdentifier:@"Controller2"]
, [self.storyboard instantiateViewControllerWithIdentifier:@"Controller3"]
, nil];发布于 2012-12-10 10:03:49
我已经使用UISegmentedControl + IBOutletCollection + presentViewController.完成了您的要求
您可以使用任何控件而不是UISegmentedControl作为您的愿望。
我在Xib中添加了3种不同的Xib,标记为ViewController1,2,3.
我还增加了两个额外的方法。一个表示对应的视图,另一个表示先前填充的视图。
我已经附加了Xib设置屏幕截图下面。
您可以只使用一个UIViewController而不是3个,并使用一些逻辑重用它:)
方法如下:
@property (strong, nonatomic) IBOutletCollection(UIViewController) NSArray *ViewCollection;
//dismissing the earlier populated view
- (IBAction)dismiss:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
//presenting the corresponding view.
- (IBAction)resetAction:(id)sender {
UISegmentedControl *mySegment = (UISegmentedControl *)sender;
int index = 0;
for (UIViewController *viewItem in _ViewCollection) {
if (index == mySegment.selectedSegmentIndex) {
[self presentViewController:viewItem animated:YES completion:nil];
}
index++;
}
}您可以从这里下载我的示例应用程序
Xib设置屏幕截图

https://stackoverflow.com/questions/13729933
复制相似问题