如何在 Superview 的视图中插入视图? (iOS)

Posted

技术标签:

【中文标题】如何在 Superview 的视图中插入视图? (iOS)【英文标题】:How to Insert View in Superview's View? (iOS) 【发布时间】:2012-06-08 03:21:46 【问题描述】:

我有下面的代码行...我将如何修改它以将子视图插入名为“foo”的超级视图的视图中?

[[self superview] addSubview:copy3];

【问题讨论】:

如果你使用storyboard,并且superview和你的view在同一个view controller的view中,你可以定义一个outlet并引用它? “命名 foo”是什么意思?视图没有 name 属性,你有一个名为 foo 的 ivar 吗? 我认为代码看起来像这样" [[self superview].foo addSubview:copy3]; 不好的方法。让视图控制器或至少 superview 管理插入视图的位置。 【参考方案1】:

有不止一种方法可以做到这一点 -

1.在您的代码中有一个IBOutlet 引用。这是从 xcode Interface builder 创建的。一旦你有了这个,那么它就相当简单了 -

[iboutlet_foo_object addSubview:copy3];

2.tag 您感兴趣的视图。再次标记视图可以从 xcode Interface builder 或代码中完成。之后 -

Foo *fooObj = [[self superview] viewWithTag:tagInt];
[fooObj addSubview:copy3];

3.最后,您可以遍历您的 superview 中的所有视图并查看哪个是 Foo 类型 -

NSArray *subviews = [[self superview] subviews];
for(UIView *v in subviews)

    if(v isKindOfClass:[Foo class])
    
        [v addSubview:copy3];
        break;
    

希望这些方法对您有所帮助...

【讨论】:

嗯...使用您的方法无法识别其他视图控制器中的视图。 您需要在新的 viewController 中引用它。首先创建一个foo 类的空实例。然后尝试将 foo 的引用从您的 oldViewController 复制到您的 newViewController。 foo 不是类...它是在父视图中声明的 uiview【参考方案2】:

首先把myView变成superview的一个属性 然后使用

[[[self superview] myView] addSubview:mySubview];

【讨论】:

它说找不到实例方法...知道为什么吗?编辑:看起来其他人的答案正在起作用。 ok :),您应该在视图超级视图类中将 myView int 设为 @property 我已将 myView 添加为 @property。 myView int 是什么意思? 对不起一个类型,你@synthesize了吗?【参考方案3】:

首先用唯一的编号标记视图 myView:

myView.tag = 0x1234;

然后你可以使用 viewWithTag 找到它:

[[[self superview] viewWithTag:0x1234] addSubview:mySubview];

【讨论】:

好的,所以它不再将子视图广告到原来的视图中......但它现在根本没有添加它。可能是因为即使我在超级视图中设置了标签,它也找不到带有我设置的标签的视图。知道为什么找不到它吗?【参考方案4】:

您实际上可能只是将其添加到“视图”而不是“超级视图”。

[[self view] addSubview:mySubview];

每当我将子视图添加到父视图时,它对我来说都很好。 如果出现问题,请告诉我。

【讨论】:

以上是关于如何在 Superview 的视图中插入视图? (iOS)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iPad 中的子视图更新 Superview?

界面视图。如何快速找到根 SuperView?

当内部按钮触摸时,如何从 Superview 中删除以编程方式创建的子视图?

如何允许某些手势通过 superview 到它下面的视图?

如何阻止 SwiftUI 视图变得比 superview 更宽

在它的 Superview 中掩盖视图的路径以显示它的 SuperSupervView