Arrays Xcode 12-SwiftUI-按钮中的字符串数组

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

我正在尝试使用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)
    }
}
或者,如果您想放弃导航,请使用全屏:

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)}