SwiftUI-@Binding:DatePickerView中的字符串

问题描述 投票:0回答:2

我正在尝试从SwiftUI中的DatePickerView返回@Binding:String值。

[有人可以告诉我格式化代码应该去哪里吗?。.到目前为止,我已经在.onAppear中尝试过,它会生成一个初始值,但不会更新(NS)...也在主体和.onDisappear中尝试过..但是什么也没有返回...

struct DateView: View {

        @Binding var dateString: String
        @State var selectedDate: Date = Date()
        let formatter = DateFormatter()

        var body: some View {

            formatter.dateFormat = "d MMM y"
            dateString = formatter.string(from: selectedDate)
            print(self.dateString)

            return DatePicker(selection: $selectedDate, displayedComponents: .date) {
                Text("Select a date")
            }.labelsHidden()
        }
    }

尝试

struct DateView: View {

        @Binding var dateString: String
        @State var selectedDate: Date = Date()
        let formatter = DateFormatter()

        var body: some View {

            DatePicker(selection: $selectedDate, displayedComponents: .date) {
                Text("Select a date")
            }.labelsHidden()
                .onAppear(){

                    self.formatter.dateFormat = "d MMM y"
                    self.dateString = self.formatter.string(from: self.selectedDate)
                    print(self.dateString)
            }
        }
    }
ios swift swiftui uidatepicker
2个回答
0
投票

[可能的方法是使用Binding包装器,在其中可以进行副作用计算/作用的设置,如下所示

var body: some View {

    return DatePicker(selection: Binding<Date>(
            get:{ self.selectedDate },
            set: { date in
                self.formatter.dateFormat = "d MMM y"
                self.dateString = self.formatter.string(from: date)
                print(self.dateString)
                self.selectedDate = date
            }), displayedComponents: .date) {
        Text("Select a date")
    }.labelsHidden()
}

0
投票

这里是代码。

struct ContentView: View {
 @ObservedObject var value = SelectionChnage()
   let formatter = DateFormatter()
   var body: some View {
    DatePicker(selection: $value.selection, displayedComponents: .date) {
           Text("Select a date")
        }.labelsHidden()
   }

}

final class SelectionChnage: ObservableObject {
var selection: Date = Date() {
    didSet {
        date_formate(slectedate: selection)
    }
}

}

func date_formate(slectedate: Date) {
let formatter = DateFormatter()
formatter.dateFormat = "d MMM y"
let dateString = formatter.string(from: slectedate)
print(dateString)

}

© www.soinside.com 2019 - 2024. All rights reserved.