用户点击字段时如何将 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 之间的类型不匹配

快速点击按钮时添加行或文本字段

如何将标签添加到 textField 类或动画占位符

如何使选择输入出现在点击

在iphone中单击按钮时如何将文本字段/标签中的值添加到数组中