检查swift 1.2中是否存在子视图

joh*_*lly 5 swift

我已经添加了我的子视图

self.view.addSubview(noticeSubView)
Run Code Online (Sandbox Code Playgroud)

在某些时候,我需要在继续执行其他一些操作之前检查该子视图是否存在.我在搜索时发现了以下内容,但不确定它是如何完成的以及如何实现.

BOOL doesContain = [self.view.subviews containsObject:pageShadowView];
Run Code Online (Sandbox Code Playgroud)

我感谢任何帮助,谢谢.

Ken*_*ner 20

您不应该询问视图中是否存在子视图,而是最好询问子视图(在您的情况下是NoticeSubView)是否具有您的视图的父视图.

所以在你的例子中你会稍后检查:

if ( noticeSubView.superview === self.view ) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

三元组"==="确保superview对象与self.view是同一个对象,而不是尝试在视图上调用isEqual().

人们过去使用的另一种方法是在子视图上设置整数标记,如下所示:

noticeSubView.tag = 4
Run Code Online (Sandbox Code Playgroud)

默认值为零,因此任何非零值都将是唯一的.

然后,您可以通过标记检查superview是否包含特定视图:

if ( self.view?.viewWithTag(4) != nil )
...
}
Run Code Online (Sandbox Code Playgroud)

如果你采用这种方法,你应该为整数值创建一个枚举,这样你就可以更清楚地了解它.

注意:有一个"?" 后self.view因为视图控制器将不会有一个视图定义,直到后viewDidLoad的"?" 确保在self.view返回时不会发生呼叫.None