我想做UITabBarController
之类的事情。 UITabBarController
具有属性viewControllers
,我可以在其中添加UIViewController *
的实例。我正在尝试用我自己的VC做同样的想法:
@property (nonatomic, copy) IBOutletCollection(UIViewController) NSArray *viewControllers;
但这不起作用。我们甚至可以吗?
编辑1。
Ramshad发布了正确的样本,但使用了XIB。我想用故事板来实现它。
编辑2. - 在赏金结束时......
我对vaderkvarn的帖子提出质疑,因为UITabBarController
的情况有效。正如Ramshad所说,在NIB中也是如此。到目前为止,dasblinkenlight的帖子是最正确的,但没有回答这个问题。我打开这个问题因为我们会发现它是否仅限于我们或者是什么方式。
PS:为什么这些downvotes?
答案 0 :(得分:2)
插座收集解决方案不起作用的原因是View Controller不是插座。来自documentation:
插座是使用符号IBOutlet和注释的属性 您可以在nib文件或故事板中以图形方式设置其值。
视图控制器不是图形对象。
如果要使用IBOutletCollection,则只应使用一个视图控制器,并将视图放入集合中。
但是如果你想为每个视图设置一个控制器,你需要采用更加程序化的方法。带视图控制器的数组可能是一个好的开始,但我不能说因为我不知道你想用它们做什么。
修改强>
更清楚,因为你似乎没有理解我的观点:
不,它不一定是一种方式。 Storyboard不是API,它是用于绘制场景和segue的图形工具。它专为基于Tab Bar的应用程序而设计。
如果您右键单击Storyboard文件并选择打开为 - >源代码,您将看到标签栏控制器具有其他视图控制器所没有的特殊元素。在Storyboard文件中乱用XML不仅仅是我。
如果您想使用Nib文件,请使用Ramshads答案。
如果您希望尽可能接近故事板,请使用dasblinkenlights答案。
但是你的问题(据我所知)的答案是否定的,没有办法用故事板来完成这个。如果是的话,它将被记录,但事实并非如此。
答案 1 :(得分:2)
虽然看起来不能将UIViewController
连接到IBOutletCollection
(或者使用它们的限制太多),但有一个简单的解决方案可以在使用故事板时起作用。此代码会进入您的viewDidLoad
方法:
_viewControllers = [NSArray arrayWithObjects:
, [self.storyboard instantiateViewControllerWithIdentifier:@"Controller1"]
, [self.storyboard instantiateViewControllerWithIdentifier:@"Controller2"]
, [self.storyboard instantiateViewControllerWithIdentifier:@"Controller3"]
, nil];
答案 2 :(得分:1)
我已使用 UISegmentedControl + IBOutletCollection + presentViewController
完成了您的要求。
您可以使用任何控件代替 UISegmentedControl
。
我已向 UIViewControllers
添加了3个不同的 Xib
,并标记为 ViewController1,2,3.
我还添加了2个额外的方法。一个用于显示相应的视图,另一个用于解除先前填充的视图。
我已附上 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++;
}
}
您可以从here
下载我的示例应用程序Xib设置屏幕截图