swift - 环境驳回搜索不适用于 macOS SwiftUI
问题描述
如何@Environment
在 macOS 中工作?这是下面的代码片段,它应该只是一个基本的 NavigationView,顶部尾随位置有一个搜索栏,理论上应该触发文本在搜索/不搜索之间切换,当你按下返回时,它应该散焦搜索字段并打印来安慰文本。
目前,它的布局正确,但isSearching
没有更新,dismissSearch()
也不起作用。有什么建议么?
struct ContentView: View {
@State var searchText = ""
@Environment(\.isSearching) var isSearching
@Environment(\.dismissSearch) var dismissSearch
var body: some View {
NavigationView {
List {
Text("Search Bar")
}
VStack(alignment: .center) {
Text(isSearching ? "Searching" : "Not Searching")
}
.searchable(text: $searchText, placement: .toolbar)
.onSubmit(of: .search) {
dismissSearch()
print(searchText)
}
}
}
}
解决方案
isSearching
&dismissSearch
环境值只能在应用了修饰符的视图中访问。searchable
不幸的是,它似乎onSubmit(of: .search)
在修改后的视图中不起作用。
isSearching
您的代码根据 Apple 的文档重新排列:
struct ContentView: View {
@State var searchText = ""
var body: some View {
NavigationView {
SearchableListView()
.searchable(text: $searchText, placement: .toolbar)
.onSubmit(of: .search, someActionFunction) // appears to only work here
}
}
struct SearchableListView: View {
@Environment(\.isSearching) var isSearching
@Environment(\.dismissSearch) var dismissSearch
var body: some View {
List {
Text("Search Bar")
}
VStack(alignment: .center) {
Text(isSearching ? "Searching" : "Not Searching")
}
}
}
}
推荐阅读
- css - CSS variables defaults: set if not already set
- reactjs - 有没有办法在 iOS Instagram 应用内浏览器中测试我的网站?
- python - 有没有办法使用用户输入将键值从另一个字典添加到字典
- python - Django“未配置设置”错误,无法定义环境变量 DJANGO_SETTINGS_MODULE
- python - 给定布尔索引,重新调整 numpy 数组中的列
- vba - 如何在文本框上设置焦点?
- javascript - Node JS/Express Routing
- flutter - Handling Firebase Data push notification in flutter
- flutter - BASE64 字符串到 Flutter 中的图像
- c++ - C++ templates specialization for signature template class