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

时间:2015-05-26 01:20:18

标签: swift

我已经使用

添加了我的子视图
self.view.addSubview(noticeSubView)

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

BOOL doesContain = [self.view.subviews containsObject:pageShadowView];

感谢任何帮助,谢谢。

3 个答案:

答案 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")
 }