gao*_*way 6 uitextfield swift swiftui
我的目的是自动对焦和移除焦点。
第一次启动的页面可以自动获得焦点,但是如果推送到下一个页面,就会自动失败。
这样工作
struct SearchTextFieldView: View {
@FocusState var focused: Field?
@State var username: String = ""
enum Field: Int, Hashable {
case name
}
var body: some View {
NavigationView {
VStack {
Button {
focused = nil
} label: {
Text("Remove Focuse")
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
focused = .name
}
}
}
.toolbar {
ToolbarItem(placement: .principal) {
TextField("user name", text: $username)
.focused($focused, equals: .name)
.disableAutocorrection(true)
.padding(4)
.border(.secondary)
}
}
.navigationBarTitleDisplayMode(.inline)
}
}
}
Run Code Online (Sandbox Code Playgroud)
推送到下一页不起作用
struct SearchRootView: View {
var body: some View {
NavigationView {
NavigationLink {
SearchTextFieldPushView()
} label: {
Text("Search")
}
}
}
}
struct SearchTextFieldPushView: View {
@FocusState var focused: Field?
@State var username: String = ""
enum Field: Int, Hashable {
case name
}
var body: some View {
VStack {
Button {
focused = nil
} label: {
Text("Remove Focuse")
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
focused = .name
}
}
}
.toolbar {
ToolbarItem(placement: .principal) {
TextField("user name", text: $username)
.focused($focused, equals: .name)
.disableAutocorrection(true)
.padding(4)
.border(.secondary)
}
}
.navigationBarTitleDisplayMode(.inline)
}
}
Run Code Online (Sandbox Code Playgroud)
是我使用方式有问题吗?仍然是错误。
似乎NavigationView使 FocusState 远离主视图。但您可以将其传递给子视图:
struct SearchRootView: View {
@FocusState var focused: Field? // define here
var body: some View {
NavigationView {
NavigationLink {
SearchTextFieldPushView(focused: _focused) // pass down here
} label: {
Text("Search")
}
}
}
}
enum Field {
case name
}
struct SearchTextFieldPushView: View {
@FocusState var focused: Field?
@State var username: String = ""
var body: some View {
VStack {
Button {
focused = nil
} label: {
Text("Remove Focus")
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
focused = .name
}
}
}
.toolbar {
ToolbarItem(placement: .principal) {
TextField("user name", text: $username)
.focused($focused, equals: Field.name)
.disableAutocorrection(true)
.padding(4)
.border(.secondary)
}
}
.navigationBarTitleDisplayMode(.inline)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1687 次 |
| 最近记录: |