Простой, чистый способ переключать / менять вид? - PullRequest
2 голосов
/ 13 февраля 2011

Я просмотрел несколько источников, но я все еще в замешательстве!Я хочу создать приложение с несколькими представлениями (только стандартные представления, без представлений таблицы или чего-либо еще), из которых я могу нажимать кнопки в каждом представлении, чтобы получить доступ к другим.

Я видел несколько способов сделать это, но единственное, что имело для меня смысл, - это поручить делегату приложения менять местами представления.И я даже не уверен, что мой код правильно очищает память представления, которое он меняет!

Есть ли более чистый или более простой способ переключения между представлениями (меня не волнует анимация), чем использованиеделегат?

Я также видел presentModalViewController, но это кажется неорганизованным.(Например, если у вас есть несколько представлений, представляющих модальные, как вы можете легко сказать новейшему представлению закрыть все представления вплоть до корня).

Существует также создание приложения на основе окна и использование окна дляaddSubView и removeFromSuperview, но как бы вы поменяли одно очень другое на другое, не создавая лишнего, громоздкого кодирования в методе делегата, чтобы определить, какое представление удалено и какое новое представление следует добавить?Я не могу найти метод addViewToSuperview, по крайней мере.

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

Говорите очень медленно, потому что я чувствую себя очень медленнокогда дело доходит до обмена взглядами!

Спасибо за ваше время!

1 Ответ

3 голосов
/ 13 февраля 2011

Работа с несколькими представлениями довольно проста, если вы понимаете концепцию этих представлений. Например, ваш делегат может быть связан с пустым родительским представлением. Затем вы просто создаете свои дочерние представления и добавляете их в родительское представление с помощью addSubview . Последнее добавленное представление будет отображаться на переднем плане.

Теперь вы можете перенести виды на передний план, используя метод yieldSubviewToFront . Помните, что все ваши представления хранятся в памяти до тех пор, пока вы не удалите их из родительского представления, используя метод removeFromSuperview дочернего представления.

Замена представлений - это просто удаление дочернего представления перед добавлением следующего, но затем вам нужно решить, хотите ли вы сохранить их или хотите освободить их, но тогда вам нужно * пересоздать (alloc / init) просмотры позже.

Кстати, если ваши представления не в нужном месте, то вам нужно либо отрегулировать позиции относительно родительского представления, либо установить их прямо в конструкторе интерфейса, потому что iOS не будет перемещать их, потому что вы добавляете их как вспомогательное представление.

Например, я использовал этот код для переключения между просмотром рекламы и тикером:

- (void) showAds:(BOOL)flag {
if( showAds != flag ) {
    while([[self.bottomView subviews] count] > 0 ) {
        [[[self.bottomView subviews] objectAtIndex:0] removeFromSuperview];
    }
    showAds = flag;
    if( showAds ) {
        [self.tickerViewController stop];
        [self.bottomView addSubview:self.adViewController.view];
    } else {
        [self.bottomView addSubview:self.tickerViewController.view];
        [self.tickerViewController start];
    }
}}

2-я строка гарантирует, что я не удаляю и не добавляю, если ничего не изменилось. Следующие 3 строки удаляют все оставшиеся вложенные виды. После этого добавьте представление «Добавить» или «Тикер» в качестве текущего подпроцесса (включая проверку правильности запуска / остановки тикера).

Надеюсь, это поможет.

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