0

SwiftUI で @State と fullScreenCover を使用してビューを切り替える方法を理解しようとしています。

メイン ビューと 2 つの単純なビュー (View1およびView2) があります。View1ボタンのタップ時"Show view 1"、およびボタンView2の入力時に開く必要があり"Show view 2"ます。@Stateまた、これが機能するように 2 つの変数を作成し、 .View1( ActiveFullscreenviewenum)で初期化しました。

 @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 での作業

4

1 に答える 1