Reputation: 12004
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.
Upvotes: 25
Views: 38093
Reputation: 398
best and easy way to find that your view is exist or not , there are many way like you check a view is contain or not in super view or just view some time this method is failed because if the Uiview is already remove then error occur, so code is here : here errorView is my UiView
errorView.tag = 333
if ( self.view?.viewWithTag(333) != nil ){
print("contain")
}
else {
print("not contain")
}
Upvotes: 2
Reputation: 27072
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.
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];
}
Upvotes: 7
Reputation: 1192
SWIFT VERSION:
let doesContain = self.view?.subviews.contains(pageShadowView)
Upvotes: 2
Reputation: 161
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)
Upvotes: 1
Reputation: 11145
you can find a sub view like this
for(UIView *view in self.view.subviews)
{
if([view isKindOfClass:[UIView class]])
{
//here do your work
}
}
Upvotes: 8
Reputation: 10333
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.
Upvotes: 84
Reputation: 1889
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
Upvotes: 0
Reputation: 33101
Give it a unique tag: view.tag = UNIQUE_TAG
, then check the container view for existence:
BOOL alreadyAdded = [containerView viewWithTag:UNIQUE_TAG] != nil;
Upvotes: 25