Arrays Xcode 12-SwiftUI-按钮中的字符串数组
我正在尝试使用Swift中的Xcode 12制作一个应用程序。现在,我列出了一个字符串数组,其中包含一个功能正常的搜索栏。我想把这些字符串变成按钮,这样用户就可以选择一个并将它们带到应用程序的下一页。这是我目前的代码:Arrays Xcode 12-SwiftUI-按钮中的字符串数组,arrays,swift,xcode,button,swiftui,Arrays,Swift,Xcode,Button,Swiftui,我正在尝试使用Swift中的Xcode 12制作一个应用程序。现在,我列出了一个字符串数组,其中包含一个功能正常的搜索栏。我想把这些字符串变成按钮,这样用户就可以选择一个并将它们带到应用程序的下一页。这是我目前的代码: @State var searchText = "" @State var isSearching = false let languages = ["Arabic", "Chinese", &q
@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)
}
}
或者,如果您想放弃导航,请使用全屏:
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
}
还有一种方法可以让程序记住为了使用NavigationLink切换视图而按下了数组中的哪个项。我需要它能够做到这一点,以便在我的应用程序的下一部分工作。是的,如果你可以将项目传递到下一个视图,你只需要声明一个变量,如:var item:String和:NavigationLink(destination:YourView(item:language)),我尝试过了,但出现了一些错误。此外,使用NavigationLink更改视图不起作用。由于某些原因,我可以使用导航链接查看带有设置文本的屏幕,但当我尝试使用它更改实际视图时,它会给我一个错误。错误是什么?可能我没有正确使用导航链接来显示新视图。这是我的代码:ForEach(self.languages.filter{self.searchText.isEmpty?true:$0.contains(self.searchText)},id:\.self){language in Divider().padding()导航链接(目的地:文本(“CameraView”){HStack{Text(语言).foregroundColor(.black)}