Подтвердить что ты не робот

Как нажимать два контроллера вида, но анимировать переход только для второго?

У меня есть три контроллера (FirstVC, SecondVC, ThirdVC) внутри storyboad, а навигация последовательна: пользователь может перемещаться из FirstVC в SecondVC, а затем в ThirdVC. Теперь мне нужно сделать какую-то кнопку, которая откроет ThirdVC от FirstVC, но также добавит SecondVC в стек навигации, поэтому, когда пользователь вернется из ThirdVC, он будет возвращен SecondVC. Итак, мне не нужна анимация от FirstVC до SecondVC, просто нужно нажать SecondVC на стек контроллера контроллера, а затем оживить только переход на ThirdVC.

Мне не удалось найти, как отключить анимацию для performSegueWithIdentifier, поэтому я думаю, что я должен создать экземпляр SecondVC из раскадровки вручную, поместить его в стек навигации и затем выполнить performSegueWithIdentifier для ThirdVC. Любые идеи, как это сделать?

4b9b3361

Ответ 1

Решение, которое вы ищете, если вы находитесь в первомVC:

NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy];
[controllers addObject:secondVc];
[controllers addObject:thirdVC];
[self.navigationController setViewControllers:controllers animated:YES];

Это будет анимировать в третьем VC, если secondVc не станет видимым в этом процессе. Когда пользователь нажимает кнопку "Назад", они возвращаются на второй Vc

Ответ 2

Чтобы сохранить стандартную анимацию для нажатия контроллера вида, в Swift:

let pushVC = UIViewController()
let backVC = UIViewController()

if let navigationController = navigationController {

  navigationController.pushViewController(pushVC, animated: true)

  let stackCount = navigationController.viewControllers.count
  let addIndex = stackCount - 1
  navigationController.viewControllers.insert(backVC, atIndex: addIndex)

}

Отображает pushVC как обычно и вставляет backVC в стек навигации, сохраняя как анимацию, так и историю для UINavigationController.

Вы можете использовать setViewControllers, но вы потеряете стандартную анимацию push.

Ответ 3

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

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomSegues/CreatingCustomSegues.html

Ссылка выше на то, как ее создать, документы IMO достаточно понятны. Затем вы можете настроить, как вы выполняете работу и появляетесь.

Другие варианты включают новые протоколы, представленные в iOS7, предполагая, что вы не хотите поддерживать старые устройства.

Смотрите видеоролик Apple Tech Talks 2014 "Архитектура современных приложений, часть 1", они демонстрируют его там.

https://developer.apple.com/tech-talks/videos/

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

UPDATE:

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

Ответ 4

Я предлагаю вручную нажимать контроллеры просмотра. Первый без анимации:

[self.navigationController pushViewController:SecondVC animated:NO];
[self.navigationController pushViewController:ThirdVC animated:YES];