gpt4 book ai didi

swift - Mac 上的 DatePicker 不保存日期,直到按下返回键

转载 作者:行者123 更新时间:2023-12-03 09:17:02 26 4
gpt4 key购买 nike

我正在使用 Mac Catalyst 将我的 iPad 应用程序调整到 Mac,并且在使用 datePicker 时遇到问题(它的时间为 datePickerMode)。在 iPad 上 datePicker 是一个轮子,每当用户在日期选择器上滚动时,就会触发 dateChanged 操作。但在 Mac 上,日期选择器不是滚动条,而是一种文本输入。我可以在 Mac 上键入和更改所有时间值,但在按下返回键之前不会触发 dateChanged 操作。

我想在用户进入某个时间时触发 dateChange 操作。 我怎样才能做到这一点?我尝试向 datePicker 添加不同的目标,但没有任何效果。

我实际上更喜欢在 Mac 上使用日期滚动条,所以如果有人知道如何做到这一点,我将不胜感激(我在互联网上四处寻找,但一无所获)!

这是我的代码:

class DateVC: UIViewController {
@IBOutlet weak var datePicker: UIDatePicker!

override func viewDidLoad() {
super.viewDidLoad()

//Just show the time
datePicker.datePickerMode = .time
}

//Action connected to datePicker. This is not called until I press enter on Mac
@IBAction func datePickerChanged(_ sender: Any) {
//do actions
}

}

最佳答案

这是一个 SwiftUI 解决方案,它在 iPad、iPhone 和 Mac Catalyst 上显示日期和时间滚动选择器。无需按返回键即可工作。如果需要,您可以轻松地仅显示 HoursMinutesPicker。

import SwiftUI

struct ContentView: View {
@State var date = Date()
var body: some View {
NavigationView {
NavigationLink(destination: DateHMPicker(date: self.$date)) {
VStack {
Text("Show time")
Text("\(self.date)")
}
}
}.navigationViewStyle(StackNavigationViewStyle())
}
}

struct DateHMPicker: View {
var titleKey: LocalizedStringKey = ""
@Binding var date: Date

var body: some View {
HStack {
Spacer()
DatePicker(titleKey, selection: self.$date, displayedComponents: .date).datePickerStyle(WheelDatePickerStyle())
HoursMinutesPicker(date: self.$date)
Spacer()
}
}
}

struct HoursMinutesPicker: View {
@Binding var date: Date
@State var hours: Int = 0
@State var minutes: Int = 0

var body: some View {
HStack {
Spacer()
Picker("", selection: Binding<Int>(
get: { self.hours},
set : {
self.hours = $0
self.update()
})) {
ForEach(0..<24, id: \.self) { i in
Text("\(i) hours").tag(i)
}
}.pickerStyle(WheelPickerStyle()).frame(width: 90).clipped()
Picker("", selection: Binding<Int>(
get: { self.minutes},
set : {
self.minutes = $0
self.update()
})) {
ForEach(0..<60, id: \.self) { i in
Text("\(i) min").tag(i)
}
}.pickerStyle(WheelPickerStyle()).frame(width: 90).clipped()
Spacer()
}.onAppear(perform: loadData)
}

func loadData() {
self.hours = Calendar.current.component(.hour, from: date)
self.minutes = Calendar.current.component(.minute, from: date)
}

func update() {
if let newDate = Calendar.current.date(bySettingHour: self.hours, minute: self.minutes, second: 0, of: date) {
date = newDate
}
}
}

关于swift - Mac 上的 DatePicker 不保存日期,直到按下返回键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61449080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com