Как я должен отслеживать контроллеры view в раскадровке xcode?

Я хотел бы связать контроллеры представлений в раскадровке xcode, чтобы добиться следующего эффекта:

A -> B -> C -> D -> E -> B -> C -> D -> E -> B -> …

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

Любые предложения о том, как наилучшим образом достичь этого, используя редактор раскадровки, код или какую-то комбинацию из двух?

Пара опций вырывается на меня:

  1. Самое простое решение с наибольшей обратной совместимостью с более старыми версиями iOS – использовать контроллер навигации, где-то ссылаться на контроллер B , а затем вы можете в E иметь некоторый IBAction который делает:

     [self.navigationController popToViewController:B animated:YES]; 

    В этой модели все segues будут представлены в раскадровке, кроме одной из E в B , для которой вы использовали бы вышеуказанный код в IBAction (или что-то еще).

  2. Если вы можете сбрасывать совместимость с iOS 5, вы также можете использовать сеанс unwind . В этом случае все расписания будут представлены в раскадровке. Но многие из нас пока не готовы отказаться от совместимости с iOS 5, поэтому, возможно, вы не захотите созерцать это решение. Но если вы хотите использовать разматывание segue, вы просто определите действие разматывания в B , например:

     - (IBAction)backToB:(UIStoryboardSegue *)segue { // if you need to do any UI update because we got an unwind segue // back to this controller, do that here } 

    После того, как у вас есть это действие для разматывания в B , у вас внезапно появится новый тип backToB называемый backToB (хотя я бы предложил вам дать ему лучшее имя, чем это), представленный вам в IB, и вы можете использовать это, чтобы перейти от E до B Очевидно, что все остальные push-сегменты будут представлены в вашем раскадровке, как обычно.

  3. Если вы действительно не хотите использовать контроллер навигации, но не нуждаетесь в совместимости с iOS 4, вы также можете добиться этого с помощью средства контроля контроллера, где у вас есть родительский настраиваемый контроллер контейнера, ParentVC и от A до E будет дочерним контроллеры. Затем вы можете настроить пользовательский переход для перехода через последовательность дочерних контроллеров.

  4. Одним из последних вариантов может быть следующее:

    BABCDE

    В этом случае, как и в случае с вариантом 1, вы просто используете контроллер навигации, когда B сначала загружается, он будет программно немедленно делать следующее в viewDidLoad

     [self presentViewController:A animated:NO]; 

    Хотя B является контроллером корневого представления, он чувствовал бы себя как A Когда A будет завершен, он вернется к B , после чего вы сможете выполнить стандартную последовательность B C D E push segue, но поскольку мы сделали B корневым контроллером, E может просто сделать popToRootViewControllerAnimated чтобы вернуться в B , и вам не нужно беспокоиться о том, чтобы держать указатель на B вокруг. Эта модель имеет большой смысл, если A – контроллер входа или экран заставки или что-то в некоторой степени из нормального потока.

Из них 1, вероятно, проще всего, 2 можно считать самым изящным (хотя вы потеряете поддержку IOS 5 и более ранних версий), 3 – вариант, если вы не против писать немного больше (кто-то сложный) код и использование памяти критически , и 4, например, 1, довольно просто, но дело только в том, имеет ли поток смысл для вашего приложения. Лично я опираюсь на вариант 1 или 4, в зависимости от того, какой контроллер A обзора был. И если нужна совместимость с iOS 4, эти два варианта будут работать и с NIB.

  • NSInvalidArgumentException - setAllHTTPHeaderFields
  • Как протестировать IOS 6 на XCode 7 El Capitan?
  • Xcode 4.5 Проблема с подпиской на корпоративный сервер (работает в Xcode 4.3.3)
  • Как создать контроллер просмотра для iPhone 4 или iPhone 4 с iOS 6 sdk?
  • iOS значок приложения для iOS 6 и iOS7
  • Rails 3.2.8 + RestKit - отображение без KVC
  • Xcode 4.5 - аварийный журнал не символизируется
  • Включить режим редактирования в ViewController
  • Отсутствует «@end» // @end должен появляться в объектно-c контексте
  • xcode 4.5, iOS 6.0 SDK Ошибка компиляции - base.h
  • Файл доступа из общей папки общего доступа или общей папки Mac с помощью приложения iPad от Bonjour Service
  • Давайте будем гением компьютера.