【发布时间】:2022-01-05 19:14:16
【问题描述】:
关于 SwiftUI 的新闻,请告诉我 :) 我有一个自定义文本字段设置为单独文件中的结构。
我想在我的内容视图中使用 onEditingChanged(关闭将是完美的),这可能吗?我尝试过绑定,但这不是一个很好的解决方案。
import Foundation
import SwiftUI
struct EntryField: View {
var sfSymbolName: String
var placeHolder: String
var prompt: String
@Binding var field: String
var uptodate:Bool = false
var showActivityIndicator:Bool = false
@State var checkMarkOpacity = 0.9
@Binding var editingChanged: Bool
var body: some View {
VStack(alignment: .leading) {
HStack {
Image(systemName: sfSymbolName)
.foregroundColor(.gray)
.font(.custom("SF Pro Light", size: 60))
TextField(placeHolder, text: $field, onEditingChanged: { editing in
editingChanged = editing
}).autocapitalization(.none)
.keyboardType(.decimalPad)
.font(.custom("SF Pro Light", size: 60))
.placeholder(when: field.isEmpty) {
Text("0,00")
.foregroundColor(.white)
.font(.custom("SF Pro Light", size: 60))
}
Image(systemName: "checkmark").opacity(uptodate ? 1 : 0)
.opacity(checkMarkOpacity)
.foregroundColor(.white)
.font(.custom("SF Pro Light", size: 40))
.onAppear(perform: {
withAnimation(.easeIn(duration: 3.0).delay(2.0) ) {
checkMarkOpacity = 0
}
})
.overlay(
ProgressView()
.opacity(showActivityIndicator ? 1 : 0)
//.progressViewStyle(ShadowProgressViewStyle())
.progressViewStyle(RingProgressViewStyle(
configuration: .init(
trackColor: .blue,
fillColor: .white,
lineWidth: 6)))
)
}
.padding(8)
.background(Color(UIColor.secondarySystemBackground))
.clipShape(RoundedRectangle(cornerRadius:10))
Text(prompt)
.fixedSize(horizontal: false, vertical: true)
.font(.caption)
}
}
}
在我的内容视图中,我有:
@State private var editingChanged: Bool = false
EntryField(sfSymbolName: "eurosign.square", placeHolder: "", prompt: "Litre Price", field: $closestLitrePrice, uptodate: uptodate, showActivityIndicator: showActivityIndicator, editingChanged: $editingChanged)
谢谢
【问题讨论】:
标签: swiftui closures textfield