【问题标题】:Xcode 12 - SwiftUI - Array of Strings into ButtonsXcode 12 - SwiftUI - 将字符串数组转换为按钮
【发布时间】:2021-05-23 11:28:36
【问题描述】:

我正在尝试在 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")
            }
        }
    }

【问题讨论】:

    标签: arrays swift xcode button swiftui


    【解决方案1】:

    您可以使用 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 and: NavigationLink(destination: YourView(item: language))
    • 我试过了,但我遇到了一些错误。此外,使用 NavigationLink 更改视图也不起作用。出于某种原因,我可以使用导航链接查看带有设置文本的屏幕,但是当我尝试使用它来更改实际视图时,它给了我一个错误
    • 也许我没有正确使用导航链接来显示新视图。这是我的代码: ForEach(self.languages.filter { self.searchText.isEmpty ? true : $0.contains(self.searchText) }, id: \.self) { Language in Divider() .padding() NavigationLink(destination : Text ("CameraView")) { HStack{ Text(language).foregroundColor(.black) }
    • 好的,您的代码将让您导航到显示文本的视图:相机视图。如果您想导航到视图,请将 Text(“CameraView”) 替换为 CameraView
    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    相关资源
    最近更新 更多