SwiftUI で @State と fullScreenCover を使用してビューを切り替える方法を理解しようとしています。
メイン ビューと 2 つの単純なビュー (View1
およびView2
) があります。View1
ボタンのタップ時"Show view 1"
、およびボタンView2
の入力時に開く必要があり"Show view 2"
ます。@State
また、これが機能するように 2 つの変数を作成し、 .View1
( ActiveFullscreenview
enum)で初期化しました。
@State private var showFullscreenView = false
@State private var activeFullscreenView: ActiveFullscreenView = .View1
問題は、ボタンView1
をタップしても常に表示されることです。Show view 2
ボタンをタップしてactiveFullscreenView変数に値を与えると、.View2
変数が変更されてfullScreenView
.
を呼び出してshowFullscreenView
変数を変更したためだと思いましたが、その後デフォルト値が.View1
変更されなかったので変更しませんでした。
これも試しました:
self.showFullscreenView = true
self.activeFullscreenView = .View2
2 番目の仮定は、この変数に初期値を与えるべきではないということでした。ただし、この場合、便利ではない追加の初期化コードが追加されます。
@State private var activeFullscreenView: ActiveFullscreenView = .View1
現在、説明されている問題がある次のコードがあります。
import SwiftUI
struct MainView: View {
enum ActiveFullscreenView {
case View1, View2
}
@State private var showFullscreenView = false
@State private var activeFullscreenView: ActiveFullscreenView = .View1
var body: some View {
ZStack {
VStack {
// Button to show View 1 in FullScreen
Button("Show view 1", action: {
self.activeFullscreenView = .View1
self.showFullscreenView = true
})
// Button to show View 2 in FullScreen
Button("Show view 2", action: {
self.activeFullscreenView = .View2
self.showFullscreenView = true
})
}
}
.fullScreenCover(isPresented: $showFullscreenView) {
switch self.activeFullscreenView {
case .View1:
Text("View1")
case .View2:
Text("View2")
}
}
}
}
struct MainView_Previews: PreviewProvider {
static var previews: some View {
MainView()
}
}
問題の解決に関連するヘルプをいただければ幸いです。fullscreenCover を使用して個別のビューを表示するのと同じ結果を得る方法についての便利な方法は高く評価されています。
Xcode 12.4、最新の iOS 14 での作業