以编程方式添加的视图对象未显示在情节提要中

Posted

技术标签:

【中文标题】以编程方式添加的视图对象未显示在情节提要中【英文标题】:Programmatically added view objects not showing up in storyboard 【发布时间】:2014-04-29 20:07:40 【问题描述】:

我看不到我以编程方式添加的任何视图对象。我需要将它们链接到IBAction 和/或IBOutlet,但无法链接到ctrl-click-drag,我不能。

例如,我在viewDidLoad中有这个:

imageView = [[UIImageView alloc] initWithFrame:CGRectMake(789, 60, 215, 72)];
[imageView setAnimationImages:imgListArray];
[self.view addSubview:imageView];

动画显示在模拟器中,但不在情节提要中。

如何让这些对象显示在情节提要中(首选),或以编程方式将它们链接到IBActions/Outlets

【问题讨论】:

故事板不像迭代环境。 yelp 你设置视图层次结构和视图控制器之间的转换,它们永远不会显示你添加的程序的语法。 我明白了...我采取了完全错误的方法。我已经弄清楚了。谢谢 【参考方案1】:

正如@vikingsegundo 所说,Image Builder 允许您将对象添加到视图中,然后将它们连接到您的类中的 IBOutlets 和 IBActions,但如果您以编程方式添加内容,那么就 Image Builder/Storyboards 而言,您只能靠自己了。

您仍然可以创建一个 iVar 或属性(首选)来存储对您的对象的引用,但您不需要 IBOutlet 标记,所以

@property (strong,nonatomic) UIImageView *imageView;

然后

self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(789, 60, 215, 72)];
[self.imageView setAnimationImages:imgListArray];
[self.view addSubview:self.imageView]; 

您还可以通过代码将动作处理程序添加到对象(相当于 ctrl 拖动到 IBAction 方法)

[self.aButton addTarget:self action:@selector(buttonEventHandler) forControlEvents: UIControlEventTouchUpInside]; 

【讨论】:

【参考方案2】:

要将代码实例化的对象设置为实例变量,只需设置它即可。像这样:

// your code 
imageView = [[UIImageView alloc] initWithFrame:CGRectMake(789, 60, 215, 72)];
[imageView setAnimationImages:imgListArray];
[self.view addSubview:imageView];
// and then:
self.myImageView = imageView; // assumes you've got a `@property` called `myImageView`

这与在情节提要中构建插座连接所做的事情完全相同,但现在您自己做。

要设置代码实例化控件的操作,请调用addTarget:action:forControlEvents:

这与在情节提要中设置动作连接完全相同,但现在您自己做。

【讨论】:

以上是关于以编程方式添加的视图对象未显示在情节提要中的主要内容,如果未能解决你的问题,请参考以下文章

无法以编程方式将视图添加到情节提要中的现有子视图

iOS:如何以编程方式将视图添加到情节提要视图

在没有情节提要的情况下以编程方式添加容器视图?

以编程方式创建视图和添加子视图比使用情节提要更好/更快[重复]

从情节提要重新加载视图时,以编程方式添加的 iOS 子视图会丢失

UIView 未显示在情节提要上