[解決済み] SwiftUIで複数のシート(isPresented:)が機能しない。
2022-06-11 13:35:50
質問
このContentViewに2つの異なるモーダルビューがあり、そのために
sheet(isPresented:)
を使用していますが、最後の1つだけが表示されるようです。どのように私はこの問題を解決することができますか?それともSwiftUIでビューに複数のシートを使用することはできないのでしょうか?
struct ContentView: View {
@State private var firstIsPresented = false
@State private var secondIsPresented = false
var body: some View {
NavigationView {
VStack(spacing: 20) {
Button("First modal view") {
self.firstIsPresented.toggle()
}
Button ("Second modal view") {
self.secondIsPresented.toggle()
}
}
.navigationBarTitle(Text("Multiple modal view problem"), displayMode: .inline)
.sheet(isPresented: $firstIsPresented) {
Text("First modal view")
}
.sheet(isPresented: $secondIsPresented) {
Text("Only the second modal view works!")
}
}
}
}
上記のコードは警告を出さずにコンパイルされます(Xcode 11.2.1)。
どのように解決するのですか?
アップロード
からスタート
Xcode 12.5.0 ベータ 3
(2021年3月3日)からは、この質問は意味を成さなくなりました。
.sheet(isPresented:)
または
.fullScreenCover(isPresented:)
を並べると、質問で提示されたコードはうまく動作します。
とはいえ、私はこの回答がまだ有効だと思います。なぜなら、シートを非常にうまく整理し、コードをきれいに、ずっと読みやすくしているからです。
実際の回答
最適な方法、それは次のような場合にも有効です。 iOS 14 :
enum ActiveSheet: Identifiable {
case first, second
var id: Int {
hashValue
}
}
struct YourView: View {
@State var activeSheet: ActiveSheet?
var body: some View {
VStack {
Button {
activeSheet = .first
} label: {
Text("Activate first sheet")
}
Button {
activeSheet = .second
} label: {
Text("Activate second sheet")
}
}
.sheet(item: $activeSheet) { item in
switch item {
case .first:
FirstView()
case .second:
SecondView()
}
}
}
}
詳しくはこちらをご覧ください。 https://developer.apple.com/documentation/swiftui/view/sheet(item:ondismiss:content:)
シートを隠すには、単に
activeSheet = nil
ボーナスです。
シートをフルスクリーンにしたい場合は、まったく同じコードを使用しますが、代わりに
.sheet
の代わりに
.fullScreenCover
関連
-
[解決済み] 型のインスタンスでは静的メンバを使用できません。
-
[解決済み] Swiftでbase64StringをStringに変換する方法とは?
-
[解決済み] メインスレッドチェッカー バックグラウンドスレッドで呼び出された UI API: -[UIApplication applicationState].
-
[解決済み] このコンテキストで型検索を行う場合、「メソッド」は曖昧である、Alamofireのエラー
-
[解決済み] SwiftでString.Indexはどのように動作するのか
-
[解決済み] Swiftの@selector()?
-
[解決済み] Swiftで乱数を生成する方法とは?
-
[解決済み】Swiftのオプション値とは何ですか?
-
[解決済み】SwiftでFloatをIntに変換する。
-
[解決済み】なぜ、Swiftの文字列では、?のような絵文字が奇妙に扱われるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Swiftでbase64StringをStringに変換する方法とは?
-
[解決済み] Error: this class is not key value coding-compliant for key tableView.' [重複] を修正する方法。
-
[解決済み] Swift - 呼出しの余分な引数
-
[解決済み] Swift: print() vs println() vs NSLog()
-
[解決済み] Swiftで乱数を生成する方法とは?
-
[解決済み] Swiftでdispatch_onceのシングルトンモデルを使う
-
[解決済み] String型のenumを列挙する方法は?
-
[解決済み】swift 4でenumをDecodableにするにはどうすればいいですか?
-
[解決済み] 非同期ネットワークリクエストのswift forループの実行が終了するまで待つ
-
[解決済み] Swift言語でのエラーハンドリング