swiftui - 在 SwiftUI 中切换键盘类型
问题描述
我有一个文本字段来输入搜索词,还有一个分段控件来指示应该搜索哪个数据库表:
struct ContentView: View {
enum SearchMode: Int {
case searchInNumbers, searchInAlphabet
}
@State private var mode = SearchMode.searchInNumbers
@State private var searchString = ""
private var keyboardType: UIKeyboardType {
if self.mode == .searchInNumbers {
NSLog("Setting keyboard to numbersAndPunctuation")
return .numbersAndPunctuation
} else {
NSLog("Setting keyboard to default")
return .default
}
}
var body: some View {
VStack {
TextField("Search string", text: self.$searchString)
.keyboardType(self.keyboardType)
.textFieldStyle(RoundedBorderTextFieldStyle())
Picker("Search in", selection: self.makePickerBinding()) {
Text("numbers").tag(0)
Text("alphabet").tag(1)
}.pickerStyle(SegmentedPickerStyle())
}.padding(20)
}
private func makePickerBinding() -> Binding<Int> {
Binding<Int>(
get: {
return self.mode.rawValue
},
set: { tag in
self.mode = SearchMode.init(rawValue: tag)!
}
)
}
}
键盘样式应该是我们搜索的数据库表的正确样式。这有效,除非键盘已经启动。
这意味着,当用户首先点击文本字段,然后更改分段控件时,键盘类型不会更改。
我不想用另一个包装的 UITextField 来修复它。它可以在 SwiftUI 中修复吗?
解决方案
推荐阅读
- reactjs - React Bootstrap 下拉菜单
- java - 在列表上执行投影
- mongodb - ESLint 和 TypeScript 在 MongoDB 脚本文件中抱怨
- typescript - 如何在环回 4 中设置浮点类型
- azure - 使用 Azure DevOps Artifact 时无法在 Build Pipeline 中执行“dotnet tool restore --interactive”
- package-managers - 是否有 pkgsrc 命令来“冻结”所有已安装的软件包?
- python - 如何在sqlite查询中将组中的年份组合为10
- node.js - 为什么我的 ctx.request.files 未定义,而 ctx.request.body 没问题?
- javascript - 在进行 fetch 调用时使用请求对象和不使用它们有什么区别?
- python - 如何使用 numpy where 选择矩阵中的项目?