Альтернатива созданию стека модальных UIViewControllers? - PullRequest
0 голосов
/ 24 мая 2011

У меня есть ситуация, когда пользователь проходит через серию «уровней». Каждый уровень имеет свой собственный UIViewController. Прямо сейчас я просто представляю следующий уровень следующим образом:

// in level 1 view controller, for example, here's how we go to level 2
[self presentModalViewController:level2VC animated:YES];

Это красиво и легко, но, очевидно, это приводит к действительно большому стеку UIViewControllers. В идеале я хотел бы сделать хороший визуальный переход (например, перекрестное растворение) к UIViewController следующего уровня, а затем выпустить последний, который сохранит память, но я думаю, что это вызовет нестабильность, так как в этом подходе можно было бы освободить родительский контроллер представления.

Какой тогда лучший подход?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 24 мая 2011

Это то, для чего был создан UINavigationController! Ссылка на класс

1 голос
/ 24 мая 2011

UINavigationController - это общая идиома для типа пользовательского интерфейса, который вы описываете.

Вы запускаете новый контроллер представления, выполняя: pushViewController:animated:, который также обеспечивает искомый эффект перехода.

Имейте в виду, во всяком случае, что это предназначено именно для "навигации": то есть, движение назад и вперед.Таким образом, это не просто движение вперед, если вы не настроите панель навигации, скрыв кнопку «назад» [self.navigationItem setHidesBackButton:YES animated:YES].

Кроме того, все UIViewController a сохраняются в памяти (всегда) и только вВ случае нехватки памяти (-[didReceiveMemoryWarning][1]) «контролируемые» виды будут автоматически освобождены, что приведет к восстановлению памяти.Если это произойдет, вам нужно будет убедиться, что вы сможете снова загрузить представления в случае, если пользователь перейдет обратно.

Если вы действительно беспокоитесь о памяти (хотя я думаю, что это не должно быть проблемой),Вы могли бы даже подумать о «попппинге» (то есть удалении) текущего контроллера, прежде чем нажать следующий.Это выдержало бы очень «плоскую» иерархию контроллеров.

...