Xcode 12 - SwiftUI -数组字符串到按钮



我正在尝试在Swift中使用Xcode 12制作应用程序。现在,我已经列出了一个字符串数组和一个功能搜索栏。我想把这些字符串变成按钮,这样用户就可以选择一个并把它们带到应用程序的下一页。这是我到目前为止的代码:

@State var searchText = ""
@State var isSearching = false
let languages = ["Arabic", "Chinese", "Dutch", "English", "French", "German", "Greek", "Hawaiian", "Hebrew", "Japanese", "Korean", "Polish", "Russian", "Spanish", "Italian"]
var body: some View {
NavigationView {
ScrollView {
HStack {
HStack {
TextField("Search", text: $searchText).ignoresSafeArea()
.padding(.leading, 30)
}
.padding(10)
.background(Color(.systemGray5))
.cornerRadius(20)
.padding(.horizontal, 10)
.onTapGesture (perform: {
isSearching = true
})
.overlay(
HStack {
Image(systemName: "magnifyingglass")
Spacer()
}.padding(.horizontal, 28)
.foregroundColor(.gray)
).transition(.move(edge: .trailing))
.animation(.easeIn)
if isSearching {
Button(action: {
isSearching = false
searchText = ""
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) 
}, label: {
Text("Cancel")
.padding(.trailing)
.padding(.leading, -12)
})
.transition(.move(edge: .trailing))
.animation(.easeIn)
}
}
//ForEach(self.languages, id: .self) { language in
ForEach(self.languages.filter {
self.searchText.isEmpty ? true : $0.contains(self.searchText)
}, id: .self) { language in
HStack{
Text(language)
Spacer()
}.padding()
Divider()
.background(Color(.systemGray4))
.padding(.leading)
}
}
.navigationTitle("Language")
}
}
}

您可以使用NavigationLink:

ForEach(self.languages.filter { self.searchText.isEmpty ? true : $0.contains(self.searchText) }, id: .self) { language in
NavigationLink(destination: //YourView) {
HStack{
Text(language)
Spacer()
}.padding()
Divider()
.background(Color(.systemGray4))
.padding(.leading)
}
}

或者如果你想放弃导航,使用.fullScreenCover:

ForEach(self.languages.filter { self.searchText.isEmpty ? true : $0.contains(self.searchText) }, id: .self) { language in
Button(action: {
present.toggle() //declare a new Boolean variable
}) {
HStack{
Text(language)
Spacer()
}.padding()
Divider()
.background(Color(.systemGray4))
.padding(.leading)
}
}.fullScreenCover(isPresented: $present) {
//YourView
}