Je crée une application dans laquelle j'ajoute une sous-vue à une vue en utilisant addSubview:
sur un IBAction
. De la même manière, lorsque le bouton avec cette IBAction
est à nouveau touché, il devrait appeler removeFromSuperview
sur cette sous-vue ajoutée à cette IBAction
:
CODE PSEUDO
-(IBAction)showPopup:(id)sender
{
System_monitorAppDelegate *delegate = (System_monitorAppDelegate *)[[UIApplication sharedApplication] delegate];
UIView *rootView = delegate.window.rootViewController.view;
if([self popoverView] is not on rootView)
{
[rootView addSubview:[self popoverView]];
}
else
{
[[self popoverView] removeFromSuperview];
}
}
Vous êtes probablement à la recherche de la -(BOOL)isDescendantOfView:(UIView *)view;
de UIView prise dans référence de la classe UIView .
Valeur renvoyée YES si le récepteur est une sous-vue immédiate ou éloignée ou si view est le récepteur lui-même; sinon NO.
Vous allez vous retrouver avec un code comme:
- (IBAction)showPopup:(id)sender {
if(![self.myView isDescendantOfView:self.view]) {
[self.view addSubview:self.myView];
} else {
[self.myView removeFromSuperview];
}
}
@IBAction func showPopup(sender: AnyObject) {
if !self.myView.isDescendant(of: self.view) {
self.view.addSubview(self.myView)
} else {
self.myView.removeFromSuperview()
}
}
Essaye ça:
-(IBAction)showPopup:(id)sender
{
if (!myView.superview)
[self.view addSubview:myView];
else
[myView removeFromSuperview];
}
UIView *subview = ...;
if([self.view.subviews containsObject:subview]) {
...
}
L'équivalent Swift ressemblera à ceci:
if(!myView.isDescendantOfView(self.view)) {
self.view.addSubview(myView)
} else {
myView.removeFromSuperview()
}
Vérifiez la vue d'ensemble de la sous-vue ...
-(IBAction)showPopup:(id)sender {
if([[self myView] superview] == self.view) {
[[self myView] removeFromSuperview];
} else {
[self.view addSubview:[self myView]];
}
}
Votre si condition devrait aller comme
if (!([rootView subviews] containsObject:[self popoverView])) {
[rootView addSubview:[self popoverView]];
} else {
[[self popoverView] removeFromSuperview];
}