我这样更改了TextField样式:
TextField("Test", text: $name).textFieldStyle(CustomTextFieldStyle())
现在,我希望它在用户点击时更改样式。
我的CustomTextFieldStyle定义为:
public struct CustomTextFieldStyle : TextFieldStyle { public func _body(configuration: TextField<Self._Label>) -> some View { configuration .font(.callout) .padding(10) .background( RoundedRectangle(cornerRadius: 4) .strokeBorder(SBGreen, lineWidth: 2)) } }
TextField("Test", text: $name).textFieldStyle(tapflag ? CustomTextFieldStyle1() : CustomTextStyle2())
你有自己的TextStyle示例吗?请分享吧!
更新
您最好在样式中使用一些参数并将其绑定到“父”视图
import SwiftUI struct ContentView: View { @State private var email = "" @State private var editing = false var body: some View { TextField("Email", text: self.$email, onEditingChanged: { edit in self.editing = edit }) .textFieldStyle(MyTextFieldStyle(focused: $editing)).font(.title).border(Color.blue) } } struct MyTextFieldStyle: TextFieldStyle { @Binding var focused: Bool func _body(configuration: TextField<Self._Label>) -> some View { configuration .padding(10) .background( RoundedRectangle(cornerRadius: 10, style: .continuous) .stroke(focused ? Color.red : Color.gray, lineWidth: 3) ).padding() } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
结果看起来像