【问题标题】:SwiftUI - EditMode and PresentationMode EnvironmentSwiftUI - EditMode 和 PresentationMode 环境
【发布时间】:2019-09-24 16:20:55
【问题描述】:

如何在 EditMode 和 PresentationMode 环境中显示表单?

例子:

当用户点击 EditButton 时,它应该在 EditMode 中显示 Form,输入文本文件,并更改 Navigation Title

import SwiftUI

struct FormView: View {

    var body: some View {

        NavigationView {


        Form {


            Text("Placeholder")

            // On EditMode it should show this
            // TextField("Placeholder", text: Value)

           }

        .navigationBarTitle("Presentation Mode")
        // On EditMode it should show this
        // .navigationBarTitle("Edit Mode")

        .navigationBarItems(trailing: EditButton())






 }


    }
}

struct FormView_Previews: PreviewProvider {
    static var previews: some View {

        FormView()
    }
}

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    在这种情况下,当使用editMode 环境变量时,由于某种原因,EditButton() 无法单独工作。而在使用自定义按钮时,editMode 会正确切换。

    有趣的是,如果 EditButton() 与自定义按钮一起添加(用于测试目的),在使用自定义按钮至少切换一次值后,EditButton() 也会恢复活力并提供预期的行为.

    以下代码 sn-p 对我来说很好:

    import SwiftUI
    
    struct TempView2: View {
        @Environment(\.editMode) var editMode
    
        @State var textValue : String = "abc"
    
        var body: some View {
            NavigationView {
                Form {
                    TextField("Placeholder", text: $textValue)
                        .disabled(.inactive == self.editMode?.wrappedValue)
                        .textFieldStyle(RoundedBorderTextFieldStyle())
                        .foregroundColor((.active == self.editMode?.wrappedValue) ? Color.red : Color.green)
                        .navigationBarTitle(.inactive == self.editMode?.wrappedValue ? "Presentation Mode" : "Edit Mode")
                        .navigationBarItems(trailing:
                            HStack {
                                //Spacer()
                                //EditButton()
                                Spacer()
                                Button(action: {
                                    self.editMode?.wrappedValue = .active == self.editMode?.wrappedValue ? .inactive : .active
                                }) {
                                    Text(.active == self.editMode?.wrappedValue ? "Done" : "Edit")
                                }
                                Spacer()
                        })
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      这是实现可编辑表单的一种方式:

      struct FormView: View {
      
          @State private var isEditing = false
          @State private var text = ""
      
          var body: some View {
              NavigationView {
                  Form {
                      TextField("Placeholder",
                                text: $text)
                          .disabled(!isEditing)
                  }
                  .navigationBarTitle(isEditing ? "Edit Mode" : "Presentation Mode")
                  .navigationBarItems(trailing: Button(isEditing ? "Save" : "Edit") {
                      self.isEditing.toggle()
                  })
              }
          }
      }
      

      【讨论】:

      • 谢谢,但我想使用 EditMode 环境
      猜你喜欢
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 2022-07-06
      • 2021-09-07
      • 2020-05-05
      • 2019-10-23
      相关资源
      最近更新 更多