複数のビューを含む登録フォームを作成しようとしていますが、ビューコントローラーは1つだけです。次のビューに進んだ後、後でサーバーに送信される構造体に入力を書き込んでいます。私が直面している問題は、新しいビューに入るときにVCが再初期化されるため、ユーザー構造体も再初期化されることです。複数のViewControllerを回避する方法はありますか?
1つのViewControllerを使用する唯一の理由が、表示しようとしているさまざまな画面間でデータを永続化できるようにするためである場合は、ViewControllerクラスの外部にデータを保存することを検討する必要があります。たとえば、共有インスタンスで別のクラスを使用する場合:
class DataContainer {
static let shared = DataContainer()
var someString: String?
}
これで、次のように任意のView Controllerから同じデータにアクセスできます(別のView Controllerに移動するときにデータを失うことはありません)。
if let someString = DataContainer.shared.someString {
print(someString)
}
ナビゲーションコントローラーを使用して、ユーザーがビューからビューに移動するときに同じビューコントローラーの新しいコピーをプッシュしているようです。
私がお勧めするのは、単一のビューコントローラー(コンテンツビューを持つ)と複数のサブクラス化されたUIViewを用意することです。
ユーザーが「次へ」をクリックして次のビューに移動したら、アニメーションで古いビューを邪魔にならない場所に移動し、新しいビューを所定の位置に移動します。
このチュートリアル の「例II」を確認してください。画像ビューを使用する代わりに、独自のカスタム(サブクラス化された)UIViewを使用するだけです。
関連する質問があります より多くのサンプルコードがあります。
必要なのは、登録パスに属するchildViewControllerを保持しているParent ViewControllerを用意することです。これは、Vea Softwareによって作成されたこの機能(この場合はナビゲーション用のスワイプジェスチャ認識機能の追加)を実現する方法の簡単なチュートリアルです。
このように、すべてのchildViewControllerは、ロジック用に独自のカスタムクラスを持つことができ、それらの間でセグエを実行する必要はありません...互いにスクロールするだけです。