У меня есть представление, содержащее пользователей 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()
. Это так запутанно!
На самом деле я не мог понять, почему вы использовали две структуры, которые связаны друг с другом, вы можете сделать это в одной структуре и контролировать с состоянием var
struct ContentView: View {
var body: some View {
VStack {
RequestSearchButton()
}
}
}
struct RequestSearchButton: View {
@State private var clicked : Bool = false
var body: some View {
Button(action: {
clicked = true
}) {
Text("User requested search")
}
Text("Did user request search: \(clicked == true ? "YES" : "NO")")
}
}
если это не то, что вы ищете, не могли бы вы подробно объяснить.
Вам нужно отслеживать состояние переменной (указывающее, активен ли поиск или нет) в родительском представлении или в модели представления, если вы хотите извлечь переменные. Затем вы можете ссылаться на эту переменную в закрытых дочерних представлениях, таких как кнопка поиска или результаты поискового запроса.
В этом случае 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)")
}
}
это мне не поможет, иногда у меня много структур, xcode заставляет меня сломать код, чтобы запустить его, иначе он не запустится, поэтому мне нужен ответ с этими структурами.