UIView:如何确定视图是否已存在?

时间:2011-03-31 16:31:15

标签: iphone objective-c cocoa-touch uiview

我想知道如何查看子视图(在我的情况下是pageShadowView)是否已添加到我的视图中。

我已经想出了这个,但它确实不起作用:

if ([pageShadowView isKindOfClass:[self.view class]]) {
        [self.view addSubview:pageShadowView];
    }

另外,我仍然对自我感到困惑。我知道这与明确我们正在谈论当前ViewController的视图有关...但如果(1)没有其他ViewControllers或(2)如果它真的不重要,我真的需要它吗?因为如果我想引用另一个viewController,我一定要调用它吗?

如果这一切都非常基本,我很抱歉,但我非常感谢你的评论。

8 个答案:

答案 0 :(得分:84)

下面:

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

是的,你需要这个selfUIViewController上没有明确的ivar“视图”。 self.view语句实际上是对方法[self view]的调用,它是UIViewController视图的获取者。

答案 1 :(得分:23)

为其指定一个唯一标记:view.tag = UNIQUE_TAG,然后检查容器视图是否存在:

BOOL alreadyAdded = [containerView viewWithTag:UNIQUE_TAG] != nil;

答案 2 :(得分:6)

你可以找到像这样的子视图

for(UIView *view in self.view.subviews)
{
    if([view isKindOfClass:[UIView class]])
    {
        //here do your work
    }
}

答案 3 :(得分:5)

还有一种方法可以在 Swift isDescendant(of view: UIView) -> Bool Obj-C 中查找:- (BOOL)isDescendantOfView:(UIView *)view

<强>夫特

    if myView.isDescendant(of: self.view) {
        //myView is subview of self.view, remove it.
        myView.removeFromSuperview()
    } else {
        //myView is not subview of self.view, add it.
        self.view.addSubview(myView)
    }

<强>的OBJ-C

if([myView isDescendantOfView:self.view]) {   
    //myView is subview of self.view, remove it.
    [myView removeFromSuperView];
} else {
    //myView is not subview of self.view, add it.
    [self.view addSubView:myView];
}

答案 4 :(得分:1)

要添加到coneybeare所说的内容,您可以执行以下操作。如果您设置了object.tag = 100;

           if ([self.view.superview viewWithTag:100] == nil){ //if statement executes if the object with tag 100 in view.superview is absent (nil)

           if ([self.view viewWithTag:100] == nil){ //if statement executes if the object with tag 100 in view (not superview) is absent (nil)

答案 5 :(得分:0)

添加视图的保留值

然后检查保留值

如果&gt; 1,然后存在,如果完美应该是2

然后释放一次

答案 6 :(得分:0)

SWIFT VERSION:

let doesContain = self.view?.subviews.contains(pageShadowView)

答案 7 :(得分:0)

找到视图是否存在的最佳简便方法,有很多方法,例如,在超级视图中检查视图是否包含,或者只是查看某些时间此方法失败,因为如果Uiview已被删除,则发生错误, 所以代码在这里: 这里的errorView是我的UiView

 errorView.tag = 333

 if ( self.view?.viewWithTag(333) != nil ){
    print("contain")
 }

 else {
    print("not contain")
 }