Как автоматически свернуть DatePicker в форме при редактировании другого поля? - PullRequest
1 голос
/ 05 апреля 2020

Я получил простое представление SwiftUI:

import SwiftUI

struct AddItemView: View {
    @State private var title = ""
    @State private var date = Date()

    var body: some View {
        Form {
            Section {
                TextField("Title", text: $title)
                DatePicker(
                    selection: $date,
                    in: Date()...,
                    displayedComponents: .date,
                    label: { Text("Date") }
                )
            }
        }
    }
}

struct AddItemView_Previews: PreviewProvider {
    static var previews: some View {
        AddItemView()
    }
}

Я пытаюсь добиться следующего:
Если развернуто DatePicker (пользователь выбирает дату, средство выбора показывает колесо для выбора даты) и затем начинает печатать текст в TextField, DatePicker должен автоматически переключиться в начальный, свернутый режим (просто показывая метку и выбранную дату). Пожалуйста, посмотрите на скриншот. Это поведение в приложении Calendar.app, например, при создании событий.

enter image description here

Любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 05 апреля 2020

Здесь возможен подход. Идея состоит в том, чтобы сбросить DatePicker компонент для каждого из событий, приводящих к редактированию.

Протестировано с Xcode 11.4 / iOS 13.4

struct AddItemView: View {
    @State private var title = ""
    @State private var date = Date()
    @State private var pickerReset = UUID()

    var body: some View {
        Form {
            Section {
                TitleTextField()

                DatePicker(
                    selection: $date,
                    in: Date()...,
                    displayedComponents: .date,
                    label: { Text("Date") }
                ).id(self.pickerReset)
            }
        }
    }

    private func TitleTextField() -> some View {
        let boundText = Binding<String>(
            get: { self.title },
            set: { self.title = $0; self.pickerReset = UUID() }
        )
        return TextField("Title", text: boundText, onEditingChanged: { editing in
            if editing {
                self.pickerReset = UUID()
            }
        })
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...