Подтвердить что ты не робот

UIView: как узнать, существует ли представление?

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

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

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

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

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

4b9b3361

Ответ 1

Здесь:

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

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

Ответ 2

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

BOOL alreadyAdded = [containerView viewWithTag:UNIQUE_TAG] != nil;

Ответ 3

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

for(UIView *view in self.view.subviews)
{
    if([view isKindOfClass:[UIView class]])
    {
        //here do your work
    }
}

Ответ 4

Есть еще один способ найти в 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.
        self.view.addSubview(myView)
    } else {
        //myView is not subview of self.view, add it.
        myView.removeFromSuperview()
    }

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];
}

Ответ 5

Чтобы добавить к сказанному, вы можете сделать следующее. Если вы установили свой 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)

Ответ 6

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

затем проверьте значение сохранения

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

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

Ответ 7

SWIFT VERSION:

let doesContain = self.view?.subviews.contains(pageShadowView)