Проверьте, есть ли представление в представлении
Я создаю приложение, где я добавляю subview в представление с помощью addSubview:
на IBAction
. Точно так же, когда кнопка с этим IBAction
коснется снова, вызовите removeFromSuperview
на этом подвью, добавленном на этом IBAction
:
PSEUDO CODE
-(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];
}
}
Ответы
Ответ 1
Вероятно, вы ищете UIView -(BOOL)isDescendantOfView:(UIView *)view;
, взятый в ссылка класса UIView.
Возвращаемое значениеДА, если приемник является непосредственным или отдаленным subview view или если view - сам приемник; иначе NO.
В итоге вы получите код:
Objective-C
- (IBAction)showPopup:(id)sender {
if(![self.myView isDescendantOfView:self.view]) {
[self.view addSubview:self.myView];
} else {
[self.myView removeFromSuperview];
}
}
Swift 3
@IBAction func showPopup(sender: AnyObject) {
if !self.myView.isDescendant(of: self.view) {
self.view.addSubview(self.myView)
} else {
self.myView.removeFromSuperview()
}
}
Ответ 2
Попробуйте следующее:
-(IBAction)showPopup:(id)sender
{
if (!myView.superview)
[self.view addSubview:myView];
else
[myView removeFromSuperview];
}
Ответ 3
UIView *subview = ...;
if([self.view.subviews containsObject:subview]) {
...
}
Ответ 4
Проверьте супервизор подвью...
-(IBAction)showPopup:(id)sender {
if([[self myView] superview] == self.view) {
[[self myView] removeFromSuperview];
} else {
[self.view addSubview:[self myView]];
}
}
Ответ 5
Ваше условие if должно выглядеть как
if (!([rootView subviews] containsObject:[self popoverView])) {
[rootView addSubview:[self popoverView]];
} else {
[[self popoverView] removeFromSuperview];
}
Ответ 6
эквивалент Swift будет выглядеть примерно так:
if(!myView.isDescendantOfView(self.view)) {
self.view.addSubview(myView)
} else {
myView.removeFromSuperview()
}