我已经使用
添加了我的子视图self.view.addSubview(noticeSubView)
在某些时候,我需要在继续执行其他一些操作之前检查该子视图是否存在等。我在搜索时发现了以下内容,但不确定它是如何完成的以及如何实现。
BOOL doesContain = [self.view.subviews containsObject:pageShadowView];
感谢任何帮助,谢谢。
答案 0 :(得分:20)
您最好不要询问视图中是否存在子视图,而是最好询问子视图(在您的情况下是NoticeSubView)是否有父视图。
因此,在您的示例中,您稍后会检查:
if ( noticeSubView.superview === self.view ) {
...
}
三元组“===”确保superview对象与self.view是同一个对象,而不是试图在视图上调用isEqual()。
人们过去使用的另一种方法是在子视图上设置整数标记,如下所示:
noticeSubView.tag = 4
默认值为零,因此任何非零值都将是唯一的。
然后,您可以通过标记检查superview是否包含特定视图:
if ( self.view?.viewWithTag(4) != nil )
...
}
如果采用这种方法,你应该为整数值创建一个枚举,这样你就可以更清楚地了解它。
注意:有一个“?”在self.view
之后因为视图控制器在viewDidLoad
之后才会定义视图,所以“?”如果self.view
返回.None
答案 1 :(得分:2)
如果noticeSubView
是自定义类(我们称之为NoticeSubView
),那么您可以这样找到它:
for view in self.view.subviews {
if let noticeSubView = view as? NoticeSubView {
// Subview exists
}
}
或者,您可以为视图指定标签并进行搜索。
noticeSubView.tag = 99
//...
for view in self.view.subviews {
if view.tag == 99 {
// Subview exists
}
}
答案 2 :(得分:-1)
找到视图是否存在的最佳简便方法,有很多方法,例如,在超级视图中检查视图是否包含,或者只是查看某些时间此方法失败,因为如果Uiview已被删除,则错误发生,所以代码在这里:这里errorView是我的UiView
errorView.tag = 333
if ( self.view?.viewWithTag(333) != nil ){
print("contain")
}
else {
print("not contain")
}