我对Swiftui
中的模态视图
有一个问题。
下面是我的代码:
struct RootView: View {
@State var showViewA: Bool = true
var body: some View {
if showViewA {
ViewA(showViewA: $showViewA)
} else {
Text("View B")
}
}
}
struct ViewA: View {
@Binding var showViewA: Bool
@State var showModal: Bool = false
var body: some View {
Button(action: { showModal.toggle() }) {
Text("Show Modal View")
}
.sheet(isPresented: $showModal) {
ModalView(showViewA: $showViewA)
}
}
}
struct ModalView: View {
@Binding var showViewA: Bool
var body: some View {
Button(action: { showViewA.toggle() }) {
Text("Change to View B")
}
}
}
问题:在模态视图
中按下按钮
时,视图A
会像它应该的那样消失,视图B
取而代之。但是,模态视图
并不会消失,而是停留在视图B的顶部。
当更改为视图B
时,如何强制关闭模式视图
?请注意,showviewa状态
也可以由模态视图
以外的其他视图更改,因此只将showmodal状态
传递给模态视图
并在单击按钮
时将其设置为false并不能完成此工作。
让我们往后退一会儿。首先,你确定你想让你的模态展示在第一步吗?大多数时候情况并非如此,所以让我们暂时将bool
设置为false。
此外,当在同一视图上有@state
和@binding
时,要非常谨慎。这是一个明显的迹象,表明我们不确定哪个视图拥有什么。
因此,通过具有一个可重用的视图(在本例中为modalview
)可以使这一点更加清晰,当按下按钮调用它时,我们将使它成为我们想要的任何内容。请参阅下面的代码:
import SwiftUI
struct RootView: View {
@State var showView: Bool = false
@State var selectedView = "A"
var body: some View {
VStack {
Button("Show View A") {
selectedView = "A"
self.showView = true }
Button("Show View B") {
selectedView = "B"
self.showView = true
}.sheet(isPresented: $showView) {
ModalView(view: selectedView)
}
}
}
}
struct ModalView: View {
@Environment(\.presentationMode) var pMode
let view: String
var body: some View {
VStack {
Text("View \(view)")
.padding()
Button("Dismiss") {self.pMode.wrappedValue.dismiss() }
}
}
}
编辑:增加了一种便捷的方式来解除
问题内容: 最后,现在有了Beta 5,我们可以以编程方式弹出到父视图。但是,在我的应用程序中,有几个地方视图都有一个“保存”按钮,该按钮可以结束几个步骤并返回到开始。在UIKit中,我使用popToRootViewController(),但是我一直无法找到在SwiftUI中执行相同操作的方法。 以下是我尝试实现的模式的简单示例。有任何想法吗? 问题答案: 设置视图调节到一个关键是让弹出到根的工
问题内容: 我目前正在构建一个带有弹出模式视图的应用程序,其中包含WkWebView。当我想在此模式视图中上传图像并且出现“照片选择”时,模式视图只是退回到触发它的视图控制器。 我该如何预防? } 谢谢! 问题答案: 我遇到了同样的问题。我发现文件上载操作表在选择一个选项时尝试自行关闭两次,这也导致模式被关闭。 一种解决方案是将包含webview的子类化,并重写以忽略它,除非它实际上有一个。 像这
我开始尝试,我感到惊讶的是,更改
最后,使用Beta 5,我们可以通过编程方式弹出到父视图。然而,在我的应用程序中有几个地方,视图有一个“保存”按钮,它结束了一个多步骤的过程并返回到开始。在UIKit中,我使用popToRootViewController(),但我无法在SwiftUI中找到同样的方法。 下面是我试图实现的模式的一个简单例子。 我该怎么做?
问题内容: 我试图弄清楚Angular的工作原理,并在模型更改时无法更新视图。 的HTML JS http://jsfiddle.net/N2G7z/ 有任何想法吗? 问题答案: 正如上面提到的Ajay beniwal一样,您需要使用Apply来开始消化。
问题内容: 我已按照此处的说明进行操作,但仍不确定这部分内容: 我曾尝试以编程方式实例化视图控制器,但仍然无济于事。 这是我退出模态视图控制器时的代码: 我正在使用情节提要通过模式视图进行筛选。 这是我希望传输回父视图控制器的数据: 这是两个字符串值。 编辑: 我试图从模态视图控制器传递数据,如下所示: 而在父视图控制器上,我这样做的是: 当我按下打印按钮时,我仍然无法获得任何价值。 模态视图控制