用户点击字段时如何将 textFieldStyle 切换为 TextField?
Posted
技术标签:
【中文标题】用户点击字段时如何将 textFieldStyle 切换为 TextField?【英文标题】:How to switch textFieldStyle to a TextField when user taps the field? 【发布时间】:2019-08-07 07:54:19 【问题描述】:当用户点击 TextField 时,我正在尝试将 TextField 样式从 .plain
更改为 .roundedCorners
。
TextField 本身最初是禁用的(.plain 样式),当用户点击它时,应该启用编辑模式(正在工作)并更改为(.roundedCorners 样式)
我已尝试根据 TextField 状态 (if disabled ? .plain : .roundedCorners)
更改样式,但这似乎不起作用
.textFieldStyle(self.listState.editingScreenshot == nil ? .plain : .roundedCorners)
使用内联 if 语句时出现以下错误:
类型“StaticMember”没有成员 '圆角'。
【问题讨论】:
【参考方案1】:有条件地使用样式可能具有挑战性,我更喜欢这种方法,它也更加可定制:
在此示例中,我根据激活使用较暗的边框颜色,而在第二个示例中,我只是完全删除了样式:
struct ContentView: View
@State private var active1: Bool = false
@State private var value1 = ""
@State private var active2: Bool = false
@State private var value2 = ""
var body: some View
VStack(alignment: .leading)
Spacer()
Text("Field 1")
TextField("", text: $value1, onEditingChanged: self.active1 = $0 ).padding().overlay(TextFieldBorder(rounded: active1))
Text("Field 2")
TextField("", text: $value2, onEditingChanged: self.active2 = $0 ).padding().overlay(TextFieldBorder(rounded: active2))
Spacer()
.background(Color(white: 0.9))
struct TextFieldBorder: View
var rounded = true
var body: some View
Group
if rounded
RoundedRectangle(cornerRadius: 10).stroke(Color.black)
else
RoundedRectangle(cornerRadius: 10).stroke(Color.gray)
彻底删除样式:
struct TextFieldBorder: View
var rounded = true
var body: some View
Group
if rounded
RoundedRectangle(cornerRadius: 10).stroke(Color.black)
else
RoundedRectangle(cornerRadius: 10).stroke(Color.clear)
【讨论】:
【参考方案2】:你要找的静态成员是roundedBorder
:
public static var roundedBorder: RoundedBorderTextFieldStyle.Member get
【讨论】:
以上是关于用户点击字段时如何将 textFieldStyle 切换为 TextField?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI textFieldStyle 修饰符 RoundedBorderTextFieldStyle 和 PlainTextFieldStyle 之间的类型不匹配