首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IBOutletCollection of UIViewControllers

IBOutletCollection of UIViewControllers
EN

Stack Overflow用户
提问于 2012-12-05 18:27:11
回答 3查看 979关注 0票数 0

我想做一些像UITabBarController这样的事情。UITabBarController具有属性viewControllers,我可以在其中添加UIViewController *实例。我试着用我自己的VC做同样的思考:

代码语言:javascript
复制
@property (nonatomic, copy) IBOutletCollection(UIViewController) NSArray *viewControllers;

但这不管用。对我们来说可能吗?

编辑1.

Ramshad贴出了适当的样本,但使用了XIB。我想用故事板来实现它。

编辑2 -在赏金的末尾.

我质疑vaderkvarn的帖子,因为在UITabBarController的情况下,它是有效的。另外,正如Ramshad所指出的,这是有可能的。到目前为止,达斯宾肯莱特的文章是最正确的,但没有回答这个问题。我认为这个问题是公开的,因为我们会知道它是否对我们是有限制的,或者是什么方式。

PS:为什么会被否决?

EN

回答 3

Stack Overflow用户

发布于 2012-12-09 14:18:46

出口集合解决方案不能工作的原因是视图控制器不是出口。来自文档

出口是一个用符号IBOutlet注释的属性,它的值可以在nib文件或故事板中以图形方式设置。

视图控制器不是图形对象。

如果您想使用IBOutletCollection,您应该只使用一个视图控制器,并将视图放在集合中。

但是,如果您希望每个视图都有一个控制器,则需要采用一种更程序化的方法。一个带有视图控制器的数组可能是一个好的开始,但我不能说,因为我不知道您想对它们做什么。

编辑:

说得更清楚一点,因为你似乎不明白我的意思:

不,这不一定是一种方式。一个故事板不是一个API,它是一个图形化的工具,用于绘制场景和图表。它是专门为诸如基于Tab的应用程序设计的。

如果您右键单击您的Storyboard文件并选择“作为->源代码打开”,您将看到Tab Bar Controller具有其他视图控制器没有的特殊元素。在Storyboard文件中处理XML是我力所能及的。

如果您想使用Nib文件,请使用Ramshads应答。

如果你想尽可能接近故事板,那就用百叶窗回答吧。

但你的问题的答案(据我所知)是否定的,没有办法用故事板来完成这个任务。如果是的话,它就会被记录下来,而事实并非如此。

票数 2
EN

Stack Overflow用户

发布于 2012-12-11 17:17:27

虽然看起来您无法将UIViewController连接到IBOutletCollection(或者对使用它们设置了太多的限制),但是有一个简单的解决方案可以在使用故事板时工作。这段代码进入您的viewDidLoad方法:

代码语言:javascript
复制
_viewControllers = [NSArray arrayWithObjects: 
,   [self.storyboard instantiateViewControllerWithIdentifier:@"Controller1"]
,   [self.storyboard instantiateViewControllerWithIdentifier:@"Controller2"]
,   [self.storyboard instantiateViewControllerWithIdentifier:@"Controller3"]
,   nil];
票数 2
EN

Stack Overflow用户

发布于 2012-12-10 10:03:49

我已经使用UISegmentedControl + IBOutletCollection + presentViewController.完成了您的要求

您可以使用任何控件而不是UISegmentedControl作为您的愿望。

我在Xib中添加了3种不同的Xib,标记为ViewController1,2,3.

我还增加了两个额外的方法。一个表示对应的视图,另一个表示先前填充的视图。

我已经附加了Xib设置屏幕截图下面。

您可以只使用一个UIViewController而不是3个,并使用一些逻辑重用它:)

方法如下:

代码语言:javascript
复制
@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设置屏幕截图

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13729933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档