swiftUI PresentaionLink第二次不起作用

时间:2019-07-16 18:43:10

标签: modal-dialog swiftui

我有一个用swiftUI编写的ContentView,如下所示。 '''     var body:一些视图{

    NavigationView {
        List {
            Section {
                PresentationLink(destination: Text("new Profile")) {
                    Text("new Profile")
                }
            }
        }
    }

'''

一切都很好,我第一次点击新的配置文件,但是当我关闭模态并尝试再次点击时,它不起作用。是错误还是功能?

1 个答案:

答案 0 :(得分:4)

PresentationLink已在Xcode 11 beta 4中弃用,改为使用.sheet,似乎可以解决此问题。

  

添加了改进的演示文稿修饰符:   工作表(isPresented:onDismiss:content :),   actionSheet(isPresented:content :)和alert(isPresented:content :) —   以及isPresented在环境中-替换现有的   Presentation(_ :),Sheet,Modal和PresentationLink类型。 (52075730)

如果将代码更改为.sheet,如下所示:

import SwiftUI

struct Testing : View {
    @State var isPresented = false

    var body: some View {
        NavigationView {
            List {
                Button(action: { self.isPresented.toggle() })
                    { Text("Source View") }
                }
            }.sheet(isPresented: $isPresented, content: { Text("Destination View") })
    }
}

然后,您将可以根据需要多次使用该模式,而不仅仅是一次。

GIF showing that the modal can be brought up and dismissed several times instead of just once

编辑:在实际情况下实施此操作后,我发现如果将.sheet放在List内,则潜在的错误似乎仍然存在。如果您遵循上面的代码示例,则不会遇到此问题,但是在使用List的真实情况下,您可能会希望将有关所选特定项目的信息传递给模态在这种情况下,您将需要通过@State var或其他方式传递有关选择的信息。下面是一个示例:

import SwiftUI

struct Testing : View {
    @State var isPresented = false
    @State var whichPresented = -1

    var body: some View {
        NavigationView {
            List {
                ForEach(0 ..< 10) { i in
                    Button(action: {
                            self.whichPresented = i
                            self.isPresented.toggle()
                })
                        { Text("Button \(i)") }
                    }
                }
            }.sheet(isPresented: $isPresented, content: { Text("Destination View \(self.whichPresented)") })
    }
}