OSX 中的 SwiftUI 自定义文本字段

Posted

技术标签:

【中文标题】OSX 中的 SwiftUI 自定义文本字段【英文标题】:SwiftUI customized text field in OSX 【发布时间】:2020-02-18 15:21:36 【问题描述】:

我正在为 Mac OSX 的 SwiftUI 创建一个编辑视图。用户可以更改他的个人资料。目前我正在使用默认的Text() 元素来查看他的当前值/设置。

现在我想创建一个编辑模式。我已经创建了一个按钮,用于切换编辑模式。如果激活了编辑模式,我将每个 Text 替换为 TextField。

当我查看 Apple 的 Mac OSX 通讯录时,我发现他们使用的是不同类型的文本字段(见图)

是否可以在 SwiftUI 和 OSX 中使用这种元素?他们叫什么,或者他们只是定制了带边框的文本字段?我找不到任何关于它们的官方文档。如果有人找到它,我会很高兴。

【问题讨论】:

【参考方案1】:

嗯,一般来说,你只需要PlainTextFieldStyle,但由于目前 SwiftUI 不允许关闭焦点环,下面有一些解决方法可以对所有文本字段全局禁用它。

无论如何...我认为值得发布,所以在这里(用 Xcode 11.3 测试)

extension NSTextField  // << workaround !!!
    open override var focusRingType: NSFocusRingType 
        get  .none 
        set  
    


struct ContentView: View 
    @State private var text = ""
    var body: some View 
        HStack 
            Text("Mobil")
            TextField("", text: $text)
                .textFieldStyle(PlainTextFieldStyle())
                .padding(1)
                .background(RoundedRectangle(cornerRadius: 2).stroke(Color.white))
                .frame(width: 100)
        
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        .background(Color.black)
    

【讨论】:

谢谢。这有帮助。那调整大小呢?在 Apple 通讯录中,它只有 Text 的宽度。这种编辑模式在 Swift 中可用吗?

以上是关于OSX 中的 SwiftUI 自定义文本字段的主要内容,如果未能解决你的问题,请参考以下文章

自定义 TextField 在 SwiftUI 代码中的 VStack 中不起作用

带有 UIViewRepresentable 的 SwiftUI 自定义文本字段 ObservableObject 和推送视图的问题

SwiftUI 列表中的自定义按钮

SwiftUI - 如何在文本视图中更改自定义 SF 符号的颜色?

自定义“可搜索”搜索字段 SwiftUI iOS 15

带有自定义选择字段的 SwiftUI 选择器