【问题标题】:How can I show different view for each items of a foreach loop in swiftui?如何在swiftui中为foreach循环的每个项目显示不同的视图?
【发布时间】:2022-06-22 18:39:26
【问题描述】:

我想为不同的血型展示不同的观点。

let categories = ["A+", "B+", "AB+", "O+", "A-", "B-", "AB-", "O-"]
let onSelectedCategory: (String) -> ()
@State private var selectedCategory: String = ""

var body: some View {
    ScrollView(.horizontal) {
        
        HStack {
            ForEach(categories, id: \.self) { category in
                Button(action: {
                    selectedCategory = category
                    onSelectedCategory(category)
                    //Here I want to go different view for each blood group, 
                    //like APositiveView(), BPositiveView... 
                }, label: {
                    Text(category)
                }).padding(10)
                .foregroundColor(selectedCategory == category ? Color.white: Color(#colorLiteral(red: 0.204610765, green: 0.2861392498, blue: 0.3685011268, alpha: 1)))
                .background(selectedCategory == category ? Color(#colorLiteral(red: 0.4982050061, green: 0.5490344763, blue: 0.5528618097, alpha: 1)): Color(#colorLiteral(red: 0.9254772663, green: 0.9412199855, blue: 0.9449794888, alpha: 1)))
                .clipShape(RoundedRectangle(cornerRadius: 10.0, style: /*@START_MENU_TOKEN@*/.continuous/*@END_MENU_TOKEN@*/))
            }
            
        }
    }
    //.ignoresSafeArea()
}

选择任何血型后,它应该为每个不同的血型显示不同的视图,例如 APositiveView()、BPositiveView()

【问题讨论】:

  • 这不是问题。你在问什么?尝试包含带问号的内容
  • 您没有任何东西可以控制您的子视图或显示哪个视图。您应该使用 NavigationView 或带有 @State 变量的 ZStack 来管理要显示的视图
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: swift swiftui swiftui-foreach


【解决方案1】:

HStack 中使用if 语句以根据selectedCategory 的值显示正确的视图:

HStack {
    if selectedCategory == "A+" {
        APositiveView()
    } else if selectedCategory == "B+" {
        BPositiveView()
    } else if ...
    ForEach(categories, id: \.self) { category in
        // ...
    }   
}

虽然解决此问题的更好方法是使用显示此类分类信息的单个视图:

struct CategoryView: View {
    @Binding var category: String
    var body: some View {
        // Display based on the value of category
    }
}

HStack {
    CategoryView(category: $selectedCategory)
    ForEach(categories, id: \.self) { category in
        // ...
    }
}

【讨论】:

    猜你喜欢
    • 2012-12-28
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2020-10-18
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多