因此,我们有一个正在生产的 watchOS 应用程序,其中包含导航堆栈内的列表和可搜索修饰符。
一切运行良好,但自从 watchOS 10.2 发布后,搜索栏就停止工作了。
您可以查看、点击和编写查询,但与状态变量的绑定不起作用,并且无法读取用户的查询。
我编写了一个非常简单的演示视图来展示该问题。我在运行 watchOS 10.2 的 Series 7 Apple Watch 上尝试过。
struct ContentView: View {
@State private var searchText = ""
@State private var showResult = false
var body: some View {
NavigationStack {
List {
Text("1")
Text("2")
Text("3")
if showResult {
Text(searchText)
}
}
}
.searchable(text: $searchText)
.onChange(of: searchText) { _, searchText in
showResult = true
}
}
}
顺便说一下,
@State searchText
上或 .onChange
修改器内的断点永远不会被触发。
我有三个问题:
我决定对我的应用程序进行更新,并用简单的 TextField 替换 Searchable 修饰符。这并不是很多工作,因为大多数可搜索逻辑都可以重用。
List {
TextField(text: $searchText) {
Text("Search", comment: "Search text field")
}
}
.onChange(of: searchText) { _, searchInput in
search(searchInput)
}
如果您想为以前的系统版本的用户提供更好的体验,您还可以使用
if #available(watchOS 10.2, *)
有条件地使用文本字段而不是可搜索的。