使用Swift检查一个子视图是否在一个视图中

36
我如何测试一个子视图是否已经被添加到父视图中?如果没有被添加,我想要添加它。否则,我想要移除它。

可能是重复的问题:检查子视图是否在视图中(重要的是,那个问题已经有了一个Swift的答案...) - nhgrif
1
根据nhgrif的评论,你链接的答案(一个Obj-C问题)在你发表评论当天被你编辑过。当这个问题被发布时,它是否在11:45am拥有Swift并且是一个足够的答案?如果是的话,为什么你要更新它? - Dave G
4个回答

88
您可以使用UIView方法isDescendantOfView
if mySubview.isDescendant(of: someParentView) {
    mySubview.removeFromSuperview()
} else {
    someParentView.addSubview(mySubview)
}

根据您的实现方式,您可能还需要用if mySubview != nil将所有内容包围起来。


26

这是一种更加简洁的做法:

if myView != nil { // Make sure the view exists

        if self.view.subviews.contains(myView) {
            self.myView.removeFromSuperview() // Remove it
        } else {
           // Do Nothing
        }
    }
}

3
我不确定它是否更清洁,但它看起来是一个很好的替代方法。 - Suragch

11
for view in self.view.subviews {
    if let subView = view as? YourNameView {
        subView.removeFromSuperview()
        break
    }
}

这实际上是删除了该类型视图中的第一个视图,但这可能不是您想要的。 - Zaporozhchenko Oleksandr

7

在这里,我们使用了两个不同的视图。父视图是我们在其中搜索后代视图并检查是否已添加到父视图中的视图。

if parentView.subviews.contains(descendantView) {
   // descendant view added to the parent view.
  }else{
   // descendant view not added to the parent view.
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接