应用程序启动后禁用 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 !!
}
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 !!
}