应用程序启动后禁用 SwiftUI 中 TextField 的自动对焦

Disable autofocus on TextField in SwiftUI after App launch

macOS 12 将 TextField 设置为启动时的第一响应者,在此更改前几秒钟。

尝试调用主应用的 onAppear、didFinishLaunching、willFinishLaunching、init() 下面的方法

       NSApp.keyWindow?.makeFirstResponder(nil)
       NSApp.keyWindow?.resignFirstResponder()

在应用自动移除焦点之前有几秒钟的短暂延迟。

如何防止这种行为?我有一些动画,当聚焦 TextField 时会触发这些动画。

我正在使用

 enum Focus { case some, none }

 @FocusState var focus : Focus

我观察到启动时焦点设置为 some,然后设置为 nil

这看起来确实像一个错误(如果需要,请向 Apple 提交反馈)。

找到的解决方法是在启动时禁用临时控制(禁用 TextField 无法获得焦点)并在下一个事件周期中重新启用它。

测试 Xcode 13.3 / macOS 12.2

这是主要部分:

TextField("", text: $txt)
    .disabled(disabled)     // << here !!
    .onAppear { 
       DispatchQueue.main.async { disabled = false } // << here !!
    }

Complete code in project is here