0

我有一个 SwiftUI 视图,我想显示一个显示附加信息的警报,但是问题是当警报被解除时,它会刷新整个视图并将用户导航回根视图(因为状态变量 showFutherInfo 更改当警报被解除时)。我不希望这种情况发生。

一个非常简化的代码版本如下所示:

struct PledgesView: View {
    @State var showFurtherInfo :Bool = false
    var body: some View {
        VStack{

                        Button(action: {
                            
                            showFurtherInfo = true

                              }) {
                            Image(systemName: "figure.walk").renderingMode(.original)
                                .resizable()
                                .frame(width: 50, height: 50, alignment: .center)
                               
                        }
                        .alert(isPresented:$showFurtherInfo) {
                            Alert(
                                title: Text("Important message"),
                                message: Text("Important Info"),
                                dismissButton: .default(Text("Dismiss"))
                            )
                        }
}
             

我想在警觉中停止这种令人耳目一新的行为,拜托。基本上我只需要帮助解耦控制正在显示的警报的变量,从这个视图

4

1 回答 1

0

为了避免刷新,您必须将所有内容(您不想被刷新)移动到单独的视图中。渲染引擎将看到视图不依赖于修改后的状态并且不会重新渲染它。

IE。就像

OtherView()     // << move everything inside !!
 .alert(isPresented:$showFurtherInfo) {
    Alert(
        title: Text("Important message"),
        message: Text("Important Info"),
        dismissButton: .default(Text("Dismiss"))
    )
 }

注意:OtherView无论如何都会重新创建(此处命名的),因为它只是在计算属性中调用,但body不会被调用。

于 2021-06-09T03:58:44.103 回答