我试图让新的 iOS 15.0.focused()视图修改器在 SwiftUI 视图出现时执行:
import SwiftUI
struct MainView: View {
@State var subViewIsDisplayed = false
var body: some View {
VStack {
Spacer()
Button(action: { subViewIsDisplayed.toggle() }) {
Text("Trigger SubView")
}
Spacer()
}
.fullScreenCover(isPresented: $subViewIsDisplayed) {
SubView()
}
}
}
struct SubView: View {
@Environment(\.dismiss) var dismiss
@FocusState private var isFocused: Bool
@State var text = ""
var body: some View {
VStack {
HStack {
Spacer()
Button(action: { dismiss() }) {
Image(systemName: "xmark")
}
}
Spacer()
TextField("Please autofocus :(", text: $text)
.focused($isFocused)
Spacer()
}
.onAppear {
self.isFocused = true
}
}
}
struct MainView_Previews: PreviewProvider {
static var previews: some View {
MainView()
}
}
Run Code Online (Sandbox Code Playgroud)
在我的物理设备上,触发“SubView”不会调出键盘(正如我所期望的那样.focused)。我究竟做错了什么?
.onAppear {
DispatchQueue.main.async {
isFocused = true
}
}
Run Code Online (Sandbox Code Playgroud)
DispatchQueue.main.async,一如既往,可以解决问题
对我来说,这似乎是另一个 SwiftUI 错误。这是一个解决方法。
我对示例代码的所有更改都在onAppear闭包中。
i=7我正在让它在模拟器和设备上工作。
struct SubView: View {
@Environment(\.dismiss) var dismiss
@FocusState private var isFocused: Bool
@State var text = ""
var body: some View {
VStack {
HStack {
Spacer()
Button(action: { dismiss() }) {
Image(systemName: "xmark")
}
}
Spacer()
TextField("Please autofocus :(", text: $text)
.focused($isFocused)
Spacer()
}
.onAppear {
Task {
for i in 1...20 {
isFocused = true
if isFocused {
print("The set finally stuck. i=\(i)")
break
}
await Task.sleep(100_000_000)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1269 次 |
| 最近记录: |