UIView: Как узнать, существует ли представление? - PullRequest
24 голосов
/ 31 марта 2011

Мне было интересно, как узнать, добавлено ли к моему представлению подпредставление (в моем случае pageShadowView).

Я придумал это, но на самом деле это не работает:

if ([pageShadowView isKindOfClass:[self.view class]]) {
        [self.view addSubview:pageShadowView];
    }

Кроме того, я все еще смущен само-вещью. Я знаю, что это связано с разъяснением того, что мы говорим о представлении текущего ViewController ... но оно мне действительно нужно, если нет (1) других ViewControllers или (2), если это не имеет значения потому что, если я когда-нибудь захочу обратиться к другому viewController, я обязательно вызову его?

Извините, если это все очень просто, но я был бы очень признателен за ваши комментарии.

Ответы [ 7 ]

84 голосов
/ 31 марта 2011

Здесь:

BOOL doesContain = [self.view.subviews containsObject:pageShadowView];

И да, вам нужно это self. На UIViewController нет явного представления "ivar". Оператор self.view на самом деле является вызовом метода [self view], который является получателем для представления UIViewController.

23 голосов
/ 31 марта 2011

Присвойте ему уникальный тег: view.tag = UNIQUE_TAG, затем проверьте наличие контейнера на наличие:

BOOL alreadyAdded = [containerView viewWithTag:UNIQUE_TAG] != nil;
6 голосов
/ 31 марта 2011

вы можете найти подвид, подобный этому

for(UIView *view in self.view.subviews)
{
    if([view isKindOfClass:[UIView class]])
    {
        //here do your work
    }
}
5 голосов
/ 23 июля 2013

Есть еще один способ найти: Swift : isDescendant(of view: UIView) -> Bool или 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];
}
1 голос
/ 21 октября 2014

Чтобы добавить к тому, что сказал coneybeare, вы можете сделать следующее. Если вы установите свой 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)
0 голосов
/ 04 ноября 2016

SWIFT VERSION:

let doesContain = self.view?.subviews.contains(pageShadowView)
0 голосов
/ 05 ноября 2011

добавить значение сохранения вида

, затем проверьте значение удержания

если> 1, то существует, если совершенное должно быть 2

затем отпустите один раз

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