I was wondering how to find out if a subview (in my case pageShadowView) has already been added to my view.
I've come up with this, but it doesn't really work:
if ([pageShadowView isKindOfClass:[self.view class]]) {
[self.view addSubview:pageShadowView];
}
Also, I'm still confused about the self.-thing. I know that this has to do with making clear that we are talking about the view of the current ViewController ... but do I really need it if there (1) are no other ViewControllers or (2) if it doesn't really matter because if I ever wanted to refer to another viewController, I'd make sure to call it?
I'm sorry if this is all very basic, but I'd be very grateful for your comments.
Here:
BOOL doesContain = [self.view.subviews containsObject:pageShadowView];
And yes, you need this self
. There is no explicit ivar "view" on UIViewController
. The self.view
statement is actually a call on method [self view]
which is a getter for UIViewController
's view.
Give it a unique tag: view.tag = UNIQUE_TAG
, then check the container view for existence:
BOOL alreadyAdded = [containerView viewWithTag:UNIQUE_TAG] != nil;
you can find a sub view like this
for(UIView *view in self.view.subviews)
{
if([view isKindOfClass:[UIView class]])
{
//here do your work
}
}
There's one more way to find, in Swift: isDescendant(of view: UIView) -> Bool
or in Obj-C: - (BOOL)isDescendantOfView:(UIView *)view
Swift:
if myView.isDescendant(of: self.view) {
//myView is subview of self.view, remove it.
self.view.addSubview(myView)
} else {
//myView is not subview of self.view, add it.
myView.removeFromSuperview()
}
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];
}
To add to what coneybeare said, you could do the following. If you set your 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)
add a retain value of the view
then check the retain value
if > 1 , then exist , if perfect should be 2
then release it once
SWIFT VERSION:
let doesContain = self.view?.subviews.contains(pageShadowView)