Nano Hash - криптовалюты, майнинг, программирование

Переключение UIViewControlles — неоднозначно

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

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

  1. Мне нужно создать много переходов, так как вы можете практически прыгать с любого экрана на любой другой экран.
  2. Переходы не сохранят состояние UIViewController, как только вы перейдете к другому, и как только вы вернетесь, он сбрасывается в исходное состояние.

Я также читал о presentModalViewController, с помощью которого вы можете нажимать свое представление как модальное поверх текущего контроллера. Однако вам нужно делать это много, и я немного боюсь проблем с потреблением памяти.

Каков наилучший способ создать приложение с несколькими представлениями без иерархии представлений приложений (UINavigationController/UITabController/etc...) Обычно я хотел бы объявить все свои контроллеры представлений в начале и просто переключаться между ними по мере необходимости (когда я сначала нужно представление, я его инициализирую) Кто-нибудь пробовал что-то подобное раньше?

Большое спасибо.

РЕДАКТИРОВАТЬ: Спасибо за ответы, я вышел и посмотрел сеанс WwDC о сдерживании UIViewController, и это помогло мне понять, как реализовать собственный контейнер UIViewController. Однако есть еще что-то, чего я не могу понять.

Когда я создаю собственный контейнер UIViewController, мне нужно добавить в него дочерние элементы с помощью addChildViewController, и это вызовет событие willMoveToParentController для моего дочернего UIViewController.

Затем я добавляю подпредставления дочерних контроллеров в представления контейнеров, используя [self.view addSubview...], однако это только загружает представления и не связывает их с событиями, которые я создал внутри своего дочернего UIViewController.

Должен ли я использовать что-то еще, кроме addSubview? или мне следует использовать отдельный класс UIView для подключения моих событий?


  • Пожалуйста, проверьте мой ответ на этот вопрос stackoverflow.com/questions/9318232 .. это может вам помочь. 19.02.2012
  • Спасибо, Малек, как мне в этом случае справиться с переходом? 19.02.2012
  • например.. UIViewController *vc = [appDelegate.controllersArr objectAtIndex:0] vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 19.02.2012

Ответы:


1

Если вы используете новую iOS 5, я предлагаю вам прочитать раздел Реализация контроллера представления контейнера в Справочник по классу UIViewController.

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

Этот шаблон можно применять как к раскадровке, так и к приложению без раскадровки. Я предпочитаю второй подход.

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

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

19.02.2012
  • Я создал собственный контейнер UIViewController после просмотра сеансов WWDC 2011, посвященных сдерживанию представлений и иерархии. Большое спасибо. 04.03.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..