SwiftUI - TextField 在 macOS 上的 List 中被禁用(不可编辑)

Posted

技术标签:

【中文标题】SwiftUI - TextField 在 macOS 上的 List 中被禁用(不可编辑)【英文标题】:SwiftUI - TextField is disabled (not editable) when placed in List on macOS 【发布时间】:2019-06-24 08:46:03 【问题描述】:

TextField 在 macOS 上的 List 中被禁用(不可编辑)。当为 ios 构建相同的代码并在模拟器中运行时,它会按预期工作。

这是一个错误,还是我遗漏了什么?

代码:

struct ContentView : View 

    @State private var text: String = ""

    var body: some View 
        VStack 
            List 
                // TextField is not editable when this code is ran on macOS
                TextField($text, placeholder: Text("Entry text"))
                Text("Entered text: \(text)")
            
            // TextField is editable on both macOS as well as iOS
            TextField($text, placeholder: Text("Entry text"))
        
    

【问题讨论】:

【参考方案1】:

那是因为该列表通过点击来驱动选择,而您在这里没有使用。 TextField 在 macOS 上的列表中只有当它所在的行有选择时才可编辑。

如果您将代码更改为这样的内容

struct ContentView : View 
    @State private var text: String = "Hello"
    @State private var selection: Int? = nil
    var body: some View 
        VStack 
            List(selection: $selection) 
                ForEach(0..<5)  _ in
                    TextField(self.$text)
                
            
            TextField($text)
        
    


然后运行代码,第一次单击单元格将使其被选中,第二次单击将使文本字段获得焦点。

【讨论】:

正在搜索这个,但它不适用于 XCode 11.4 和 Swift5.2。请问可以修吗?【参考方案2】:

使用以下代码创建 TextField

struct ContentView : View 
    @State private var helloText: String = "Hello"
    @State private var selection: Int? = nil
    var body: some View 
        VStack 
            List(selection: $selection) 
                ForEach(0..<5)  _ in
                    TextField(.constant(self.helloText), placeholder: Text("Entry text")).textFieldStyle(.roundedBorder)
                
            

        
    

【讨论】:

这里也一样。正在搜索这个,但它不适用于 XCode 11.4 和 Swift5.2。请问可以修吗?

以上是关于SwiftUI - TextField 在 macOS 上的 List 中被禁用(不可编辑)的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUi 有没有办法在 TextField 中获取文本

检测用户何时停止/暂停在 TextField 中写入 - SwiftUI

如何在 SwiftUI 中检测 TextField 的实时变化?

在 SwiftUI 中设置 TextField 的宽度

SwiftUI:UIAlertController 的 textField 在 UIAlertAction 中没有响应

SwiftUI - 在 ForEach 中获取 TextField 数组