Qt/QML 嵌套视图下的TextField焦点设置问题
解决SplitView打开时自动聚焦TextField的方案
- 优先使用SwiftUI官方推荐的
@FocusState绑定焦点状态,替代旧的focus参数,稳定性更高:struct ContentView: View { @FocusState private var isTextFieldFocused: Bool @State private var inputText = "" var body: some View { NavigationSplitView { // 侧边栏区域内容 } detail: { TextField("请输入内容", text: $inputText) .focused($isTextFieldFocused) } .onAppear { // 延迟执行,等待SplitView及子视图完成布局渲染 DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { isTextFieldFocused = true } } } } - 若直接
onAppear设置焦点无效,可改用.task异步任务实现延迟聚焦,效果一致:.task { try? await Task.sleep(nanoseconds: 100_000_000) isTextFieldFocused = true } - 不建议直接调用
forceActiveFocus(),该方法需配合特定FocusedValueKey使用,且依赖视图层级的稳定性,容错性远低于@FocusState方案。 - 若涉及UIKit桥接的
UISplitViewController,可监听SplitView的didShow事件,在事件回调中触发焦点设置。
内容的提问来源于stack exchange,提问作者Matthias
相关产品推荐
相关产品推荐

