ios - 如何通知视图变量状态已从 SwiftUI 中提取的子视图中更新
问题描述
我有一个包含用户的视图,UsersContentView
在这个视图中有一个按钮被提取为子视图:RequestSearchButton()
,并且在按钮下有一个Text
视图,如果用户请求搜索或没有,它会显示结果,它也被提取为一个子视图ResultSearchQuery()
。
struct UsersContentView: View {
var body: some View {
ZStack {
VStack {
RequestSearchButton()
ResultSearchQuery(didUserRequestSearchOrNo: .constant("YES"))
}
}
}
}
struct RequestSearchButton: View {
var body: some View {
Button(action: {
}) {
Text("User requested search")
}
}
}
struct ResultSearchQuery: View {
@Binding var didUserRequestSearchOrNo: String
var body: some View {
Text("Did user request search: \(didUserRequestSearchOrNo)")
}
}
如何在单击按钮时更新@Binding var didUserRequestSearchOrNo: String
内部。它太混乱了!ResultSearchQuery()
RequestSearchButton()
解决方案
如果要提取变量,您需要在父视图或 ViewModel 中跟踪变量的状态(指示搜索是否处于活动状态)。然后,您可以在封闭的子视图(如搜索按钮或搜索查询结果)中引用此变量。
在这种情况下,a 更喜欢布尔值进行跟踪,因为它易于处理且含义清晰。
struct UsersContentView: View {
@State var requestedSearch = false
var body: some View {
ZStack {
VStack {
RequestSearchButton(requestedSearch: $requestedSearch)
ResultSearchQuery(requestedSearch: $requestedSearch)
}
}
}
}
struct RequestSearchButton: View {
@Binding var requestedSearch: Bool
var body: some View {
Button(action: {
requestedSearch.toggle()
}) {
Text("User requested search")
}
}
}
struct ResultSearchQuery: View {
@Binding var requestedSearch: Bool
var body: some View {
Text("Did user request search: \(requestedSearch.description)")
}
}
推荐阅读
- c++ - SFINAE 和衰变不能一起工作。为什么?
- java - 将 6 毫秒的字符串转换为 java 时间戳
- sql - 用 OR 组合两个连接表上的谓词
- python - FastApi/Sqlalchemy“类未映射”错误
- kubernetes-helm - Helm:我们如何决定 helm 模板中的缩进值?
- c - 如何在c中访问在.so(共享库)中声明的用户定义数据类型
- html - How to Open Index Nav in all Pages
- javascript - Javascript: element onchange event async/await callback
- python - How iterate over a list and delete values along the way
- html - How do I make this Materialize table more responsive on mobile devices