web-dev-qa-db-ja.com

複数のビュー用の単一のビューコントローラ

複数のビューを含む登録フォームを作成しようとしていますが、ビューコントローラーは1つだけです。次のビューに進んだ後、後でサーバーに送信される構造体に入力を書き込んでいます。私が直面している問題は、新しいビューに入るときにVCが再初期化されるため、ユーザー構造体も再初期化されることです。複数のViewControllerを回避する方法はありますか?

6
Raoul

1つのViewControllerを使用する唯一の理由が、表示しようとしているさまざまな画面間でデータを永続化できるようにするためである場合は、ViewControllerクラスの外部にデータを保存することを検討する必要があります。たとえば、共有インスタンスで別のクラスを使用する場合:

class DataContainer {

    static let shared = DataContainer()

    var someString: String?

}

これで、次のように任意のView Controllerから同じデータにアクセスできます(別のView Controllerに移動するときにデータを失うことはありません)。

if let someString = DataContainer.shared.someString {
    print(someString)
}
5
silicon_valley

ナビゲーションコントローラーを使用して、ユーザーがビューからビューに移動するときに同じビューコントローラーの新しいコピーをプッシュしているようです。

私がお勧めするのは、単一のビューコントローラー(コンテンツビューを持つ)と複数のサブクラス化されたUIViewを用意することです。

ユーザーが「次へ」をクリックして次のビューに移動したら、アニメーションで古いビューを邪魔にならない場所に移動し、新しいビューを所定の位置に移動します。

このチュートリアル の「例II」を確認してください。画像ビューを使用する代わりに、独自のカスタム(サブクラス化された)UIViewを使用するだけです。

関連する質問があります より多くのサンプルコードがあります。

0

必要なのは、登録パスに属するchildViewControllerを保持しているParent ViewControllerを用意することです。これは、Vea Softwareによって作成されたこの機能(この場合はナビゲーション用のスワイプジェスチャ認識機能の追加)を実現する方法の簡単なチュートリアルです。

チュートリアル

このように、すべてのchildViewControllerは、ロジック用に独自のカスタムクラスを持つことができ、それらの間でセグエを実行する必要はありません...互いにスクロールするだけです。

0
Pato Salazar