我想知道如何找出子视图(在我的情况下是pageShadowView)是否已添加到我的视图中。
我想出了这个,但它确实不起作用:
if ([pageShadowView isKindOfClass:[self.view class]]) {
[self.view addSubview:pageShadowView];
}
而且,我仍然对自我感到困惑。我知道这与明确我们正在谈论当前ViewController的视图有关...但如果(1)没有其他ViewControllers或(2)如果它真的不重要,我真的需要它吗?因为如果我想引用另一个viewController,我一定要调用它吗?
如果这一切都非常基本,我很抱歉,但我非常感谢你的评论。
这里:
BOOL doesContain = [self.view.subviews containsObject:pageShadowView];
是的,你需要这个self
。在UIViewController
上没有明确的ivar“观点”。 self.view
声明实际上是对方法[self view]
的调用,这是UIViewController
观点的吸气剂。
给它一个唯一的标签:view.tag = UNIQUE_TAG
,然后检查容器视图是否存在:
BOOL alreadyAdded = [containerView viewWithTag:UNIQUE_TAG] != nil;
你可以找到像这样的子视图
for(UIView *view in self.view.subviews)
{
if([view isKindOfClass:[UIView class]])
{
//here do your work
}
}
在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];
}
要添加到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)
添加视图的保留值
然后检查保留值
如果> 1,那么存在,如果完美应该是2
然后释放一次
SWIFT版本:
let doesContain = self.view?.subviews.contains(pageShadowView)