Проверьте, находится ли подпредставление в представлении - PullRequest
91 голосов
/ 14 сентября 2011

Я создаю приложение, в котором добавляю подпредставление к представлению, используя addSubview: на IBAction.Таким же образом, когда снова нажимается кнопка с этим IBAction, следует вызвать removeFromSuperview для этого подпредставления, добавленного к этому IBAction:

КОД 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];
    }

}

Ответы [ 6 ]

255 голосов
/ 14 сентября 2011

Возможно, вы ищете -(BOOL)isDescendantOfView:(UIView *)view; UIView, взятый из Ссылка на класс UIView .

Возвращаемое значение ДА, если получатель является непосредственным или отдаленным подпредставление представления или если представление - сам получатель; в противном случае НЕТ.

В итоге вы получите код, подобный:

Objective-C

- (IBAction)showPopup:(id)sender {
    if(![self.myView isDescendantOfView:self.view]) { 
        [self.view addSubview:self.myView];
    } else {
        [self.myView removeFromSuperview];
    }
}

Свифт 3

@IBAction func showPopup(sender: AnyObject) {
    if !self.myView.isDescendant(of: self.view) {
        self.view.addSubview(self.myView)
    } else {
        self.myView.removeFromSuperview()
    }
}
17 голосов
/ 14 сентября 2011

Попробуйте это:

-(IBAction)showPopup:(id)sender
{
    if (!myView.superview)
        [self.view addSubview:myView];
    else
        [myView removeFromSuperview];
}
11 голосов
/ 14 сентября 2011
    UIView *subview = ...;
    if([self.view.subviews containsObject:subview]) {
        ...
    }
3 голосов
/ 16 июня 2015

Эквивалент Swift будет выглядеть примерно так:

if(!myView.isDescendantOfView(self.view)) {
    self.view.addSubview(myView)
} else {
    myView.removeFromSuperview()
}
2 голосов
/ 14 сентября 2011

Проверить суперпредставление подпредставления ...

-(IBAction)showPopup:(id)sender {
    if([[self myView] superview] == self.view) { 
        [[self myView] removeFromSuperview];           
    } else {
        [self.view addSubview:[self myView]];         
    }
}
1 голос
/ 14 сентября 2011

Ваше условие должно идти как

if (!([rootView subviews] containsObject:[self popoverView])) { 
    [rootView addSubview:[self popoverView]];
} else {
    [[self popoverView] removeFromSuperview];

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...