我已经介绍了一个模态视图,但是我希望用户经历一些步骤后才能将其关闭。 当前可以拖动视图以将其关闭。
有没有办法阻止这种可能性?
我已经看过WWDC会议视频,他们提到了它,但是我似乎没能确切地知道我需要的代码。
struct OnboardingView2 : View {
@Binding
var dismissFlag: Bool
var body: some View {
VStack {
Text("Onboarding here! ??")
Button(action: {
self.dismissFlag.toggle()
}) {
Text("Dismiss")
}
}
}
}
我目前有一些文字和一个按钮,以后会用它来关闭视图。
答案 0 :(得分:2)
如果您使用第三方库Introspect,这很容易,这非常有用,因为它可以轻松访问相应的UIKit组件。在这种情况下,(?: : begin non-capture group
\$ : match '$'
| : or
\G : assert position at the end of the previous match
) : end non-capture group
\d+? : match 1+ digits
\K : reset starting point of match and no longer include
previously-consumed characters in reported match
(?= : begin positive lookahead
(?:\d{3}) : match 3 digits in a non-capture group
+ : execute non-capture group 1+ times
$ : match end of string
) : end positive lookahead
中的属性:
UIViewController
答案 1 :(得分:1)
从 iOS 15 开始,我们可以使用 interactiveDismissDisabled
:
func interactiveDismissDisabled(_ isDisabled: Bool = true) -> some View
我们只需要将它附加到工作表上。以下是来自 documentation 的示例:
struct PresentingView: View {
@Binding var showTerms: Bool
var body: some View {
AppContents()
.sheet(isPresented: $showTerms) {
Sheet()
}
}
}
struct Sheet: View {
@State private var acceptedTerms = false
var body: some View {
Form {
Button("Accept Terms") {
acceptedTerms = true
}
}
.interactiveDismissDisabled(!acceptedTerms)
}
}
答案 2 :(得分:0)
我有一个类似的问题here
struct Start : View {
let destinationView = SetUp()
.navigationBarItem(title: Text("Set Up View"), titleDisplayMode: .automatic, hidesBackButton: true)
var body: some View {
NavigationView {
NavigationButton(destination: destinationView) {
Text("Set Up")
}
}
}
}
这里最主要的是它隐藏了后退按钮。这将关闭“后退”按钮,并使其变为使用户无法向后滑动以太坊。
对于应用程序的设置部分,您可以创建一个新的SwiftUI文件,并添加一个类似的东西回家,同时还可以合并自己的设置代码。
struct SetUp : View {
let destinationView = Text("Your App Here")
.navigationBarItem(title: Text("Your all set up!"), titleDisplayMode: .automatic, hidesBackButton: true)
var body: some View {
NavigationView {
NavigationButton(destination: destinationView) {
Text("Done")
}
}
}
}
答案 3 :(得分:0)
不确定这是否有助于显示正在使用的模态,甚至不确定显示使用的模态的方法,但是当您使用UIViewController
从UIHostingController
呈现SwiftUI视图时
let vc = UIHostingController(rootView: <#your swiftUI view#>(<#your parameters #>))
您可以设置modalPresentationStyle
。您可能需要决定哪种样式适合您的需求,但是.currentContext
可以防止拖动来消除。
旁注:我不知道如何消除从UIHostingController
发出的视图,这就是为什么我亲自问问Q来找出?的原因
答案 4 :(得分:0)
当前如何在SwiftUI中禁用拖动以关闭以解决以下问题:
答案 5 :(得分:0)
您可以使用此答案并在一些消除步骤后对其进行自定义: https://stackoverflow.com/a/58393024/8397245
答案 6 :(得分:-1)
在https://gist.github.com/mobilinked/9b6086b3760bcf1e5432932dad0813c0
进行了扩展,以使控制模态排放变得毫不费力。Apple正式解决方案发布之前的临时解决方案。
/// Example:
struct ContentView: View {
@State private var presenting = false
var body: some View {
VStack {
Button {
presenting = true
} label: {
Text("Present")
}
}
.sheet(isPresented: $presenting) {
ModalContent()
.allowAutoDismiss { false }
// or
// .allowAutoDismiss(false)
}
}
}