SwiftUI - 如何在视图加载时自动激活 TextField?

Nic*_*lli 17 keyboard textfield swiftui

我的视图中有一个 TextField,看起来像这样:

@FocusState private var keyboardFocused: Bool

VStack {
  TextField("Name your item...", text: $itemName)
    .focused($keyboardFocused)
  
  ...
}
Run Code Online (Sandbox Code Playgroud)

现在,这一切都嵌入到按下按钮时加载的视图中,如下所示:

Button(action: someAction, label: { ... })
.fullScreenCover(isPresented: $viewIsPresented) {
  ViewWithTextField(...)
}
Run Code Online (Sandbox Code Playgroud)

我想做到这一点,以便在加载此视图时,自动激活 TextField/(聚焦?)并弹出键盘。我怎样才能做到这一点?

Yrb*_*Yrb 17

只需将您的设置@FocusState为并将其包装true在. 需要延迟,因为视图必须在更改之前出现在屏幕上,否则它将无法工作。.onAppearDispatchQueue.main.asyncAfter@FocusState

VStack {
  TextField("Name your item...", text: $itemName)
    .focused($keyboardFocused)
    .onAppear {
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            keyboardFocused = true
        }
    }
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 两件事情。首先,请查看[最小、可重现示例 (MRE)](https://stackoverflow.com/help/minimal-reproducible-example) 链接。我们应该能够获取您的代码并构建它。其次,我想提请您注意我的回答中的第二句话:“需要延迟,因为在更改 @FocusState 之前视图必须在屏幕上,否则它将无法工作。” 该代码运行良好。只是全屏覆盖需要更长的时间才能出现在屏幕上。您需要调整延迟时间。 (2认同)