Storyboad内に3つのコントローラー(FirstVC、SecondVC、ThirdVC)があり、ナビゲーションはシーケンシャルです:ユーザーはFirstVCからSecondVC、そしてThirdVCにナビゲートできます。ここで、FirstVCからThirdVCを開くボタンを作成する必要がありますが、ナビゲーションスタックにSecondVCも配置するため、ユーザーがThirdVCから戻ると、SecondVCに戻ります。ですから、FirstVCからSecondVCへのアニメーションは必要ありません。NavigationControllerスタックにSecondVCをプッシュし、ThirdVCへの遷移のみをアニメーション化するだけです。
PerformSegueWithIdentifierのアニメーションを無効にする方法が見つからなかったため、ストーリーボードからSecondVCを手動でインスタンス化し、ナビゲーションスタックに配置してから、ThirdVCのperformSegueWithIdentifierを実行する必要があると考えています。それを行う方法はありますか?
FirstVCを使用している場合に探しているソリューション:
NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy];
[controllers addObject:secondVc];
[controllers addObject:thirdVC];
[self.navigationController setViewControllers:controllers animated:YES];
これは、secondVCがプロセスで表示されることなく、thirdVCでアニメーション化します。ユーザーが戻るボタンを押すと、secondVcに戻ります
View Controllerをプッシュするための標準アニメーションを保持するには、in 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
を使用できますが、標準のプッシュアニメーションは失われます。
KimAMartinsenソリューションのSwiftバージョン
let firstVC = self.storyboard?.instantiateViewController(withIdentifier: "Tests") as! firstViewController
let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "Dashboard") as! SecondViewController
var controllers = self.navigationController?.viewControllers
controllers?.append(firstVC)
controllers?.append(secondVC)
self.navigationController?.setViewControllers(controllers!, animated: true)
extension UINavigationController {
open func pushViewControllers(_ inViewControllers: [UIViewController], animated: Bool) {
var stack = self.viewControllers
stack.append(contentsOf: inViewControllers)
self.setViewControllers(stack, animated: animated)
}
}
うーん、おそらくアニメーションを行わないカスタムセグエを書いて、ストーリーボードのセグエがセグエクラスを参照していることを確認してください。
上記のリンクを作成方法にリンクすると、ドキュメントIMOはかなり自明です。その後、セグエの動作と表示方法をカスタマイズできます。
他のオプションには、古いデバイスをサポートしたくないと仮定してiOS7で導入された新しいプロトコルが含まれます。
Apple Tech Talks 2014ビデオ「Architecting Modern Apps part 1」をご覧ください。
https://developer.Apple.com/tech-talks/videos/
あなたの質問には多くの解決策がありますが、上記のいずれかが役立つことを願っています。そうでない場合はお知らせください。別のものを提案します。
更新:
別のオプションは、おそらくこれを達成するためにNavigation Controllerをタブの1つに追加するか、必要に応じてタブを交換することができるので、おそらくこれがあなたのニーズに合う場合、Tav View Controllerを使用することです。
View Controllerを手動でプッシュすることをお勧めします。最初のアニメーションなし:
[self.navigationController pushViewController:SecondVC animated:NO];
[self.navigationController pushViewController:ThirdVC animated:YES];