UIView Ад. Скрытие одного подпредставления скрывает их все

Очевидно, я нахожусь в какой-то закрученной зоне ада UIView в тот момент, когда верх или низ родного брата является родителем, и мой мозг полностью зажарен.

Вот сделка. Действительно, очень просто. У меня есть представление контейнера с N дочерними узлами листового узла. Здесь нет никаких хитростей, все просто. Я делаю следующее:

// occludedPageSet — это набор тегов представления, соответствующих представлениям, // которые находятся за пределами экрана и, таким образом, полностью скрыты. Это определялось геометрически.

for (NSNumber *n in occludedPageSet) {

            // Point to a view corresponding to this tage
    UIView *v = [self.containerView viewWithTag:[n integerValue]];

            // Hide this view
    if (v.hidden == NO) {

                    NSLog(@"View %d is occluded. Hide it.", [n integerValue]);
        v.hidden = YES;

    } // if (v.hidden == NO)


} // for (occludedPageSet)

Довольно ручная штука. К сожалению, ВСЕ родственные представления исчезают! Что за?!? Как это возможно?

Нужен ли мне [сохранить]/[выпустить] для v здесь. Я в тупике.

Сбит с толку, Дуг


person dugla    schedule 04.10.2009    source источник
comment
Вы уверены, что представления, которые скрываются, когда они не должны быть подпредставлениями, а не братьями и сестрами?   -  person rpetrich    schedule 05.10.2009


Ответы (3)


Судя по всему, все ваши просмотры входят в occludedPageSet, или все ваши теги одинаковые n.

NSNumber *n in occludedPageSet

Или одно из представлений v является родительским для остальных, поэтому, скрывая его, вы скрываете их все.

person Jordan    schedule 05.10.2009

Я что-то упустил в этой проблеме? Вполне естественно, что если вы скроете представление, любое представление, которое оно содержит как подпредставление, также будет скрыто. В конце концов, вы не можете видеть представление контейнера...

Если вы поместите десять вещей в коробку и сделаете коробку невидимой, разве вы не ожидаете, что это будет означать, что вы не сможете видеть вещи в коробке? Точно так же плащ-невидимка был бы бесполезен, если бы невидимым был только плащ, а не человек под ним...

Если вам нужно, чтобы какие-то вещи были видны, а какие-то нет, работайте с конкретными предметами, а не с контейнером.

person Kendall Helmstetter Gelner    schedule 05.10.2009

Убедитесь, что тег self.containerView полностью отличается от любых дочерних тегов. Вызов viewWithTag вернет приемник, если это заданный тег, который, в свою очередь, скроет все ваши представления. Либо выполните итерацию, либо распечатайте адрес, на который указывает v, чтобы вы знали, что перекрываете то, что должны перекрывать.

person kidnamedlox    schedule 05.10.2009