SwiftUI 防止用户在输入数据时点击按钮
SwiftUI Prevent user from tapping button while entering data
如果用户在 DataPtView 中编辑 TextField(光标闪烁)时单击按钮,应用程序会崩溃。
在列表单元格中,我有一个按钮,它会影响同样显示在单元格中的视图。
这是一个片段,iPad 具体。
单元格视图:
VStack{
Button("TagOut"){
self.tagOut.toggle()
}
if self.tagOut {
TagOutView(question: question)
}
if !self.tagOut{
if question.type == "Y/N"{
YesOrNoView(question: question)
} else if question.type == "DataPt"{
DataPtView(question: question)
} else {
RecordEntryView()
}
...
数据点视图:
...
TextField("Data: ", text: $collectedData)
.onReceive(Just(collectedData)) {value in
let filtered = value.filter {"01234567890-".contains([=11=])}
if filtered != value{
self.invalidCollectedData = true
} else {
self.invalidCollectedData = false
}
}
...
当 CellView 被键盘覆盖时,我还使用了 AdaptsToKeyboard ViewModifier。
move-textfield-up-when-the-keyboard-has-appeared-in-swiftu
如何防止这种情况发生?如果用户在单击按钮之前隐藏键盘,一切都很好,但这并不直观。
如果您尝试检查修饰符高度是否大于 0 并基于此句柄单击按钮会怎么样。在您的单元格视图中定义:
@State var keyboardHeight: CGFloat = 0
将您的 AdaptsToKeyboardModifier 更改为在其中绑定 var
:
struct AdaptsToKeyboard: ViewModifier {
@Binding var currentHeight: CGFloat = 0
...
}
现在您需要使用以下构造函数初始化修饰符:
.modifier(AdaptsToKeyboard(currentHeight: $keyboardHeight))
现在您有两个选项来处理按钮按下:
要禁用按钮交互:
Button("TagOut"){
self.tagOut.toggle()
}.disabled(keyboardHeight > 0)
忽略新闻:
Button("TagOut") {
if self.keyboardHeight == 0 {
self.tagOut.toggle()
}
}
如果用户在 DataPtView 中编辑 TextField(光标闪烁)时单击按钮,应用程序会崩溃。
在列表单元格中,我有一个按钮,它会影响同样显示在单元格中的视图。 这是一个片段,iPad 具体。
单元格视图:
VStack{
Button("TagOut"){
self.tagOut.toggle()
}
if self.tagOut {
TagOutView(question: question)
}
if !self.tagOut{
if question.type == "Y/N"{
YesOrNoView(question: question)
} else if question.type == "DataPt"{
DataPtView(question: question)
} else {
RecordEntryView()
}
...
数据点视图:
...
TextField("Data: ", text: $collectedData)
.onReceive(Just(collectedData)) {value in
let filtered = value.filter {"01234567890-".contains([=11=])}
if filtered != value{
self.invalidCollectedData = true
} else {
self.invalidCollectedData = false
}
}
...
当 CellView 被键盘覆盖时,我还使用了 AdaptsToKeyboard ViewModifier。 move-textfield-up-when-the-keyboard-has-appeared-in-swiftu
如何防止这种情况发生?如果用户在单击按钮之前隐藏键盘,一切都很好,但这并不直观。
如果您尝试检查修饰符高度是否大于 0 并基于此句柄单击按钮会怎么样。在您的单元格视图中定义:
@State var keyboardHeight: CGFloat = 0
将您的 AdaptsToKeyboardModifier 更改为在其中绑定 var
:
struct AdaptsToKeyboard: ViewModifier {
@Binding var currentHeight: CGFloat = 0
...
}
现在您需要使用以下构造函数初始化修饰符:
.modifier(AdaptsToKeyboard(currentHeight: $keyboardHeight))
现在您有两个选项来处理按钮按下:
要禁用按钮交互:
Button("TagOut"){ self.tagOut.toggle() }.disabled(keyboardHeight > 0)
忽略新闻:
Button("TagOut") { if self.keyboardHeight == 0 { self.tagOut.toggle() } }