我有一个for循环,它遍历一个名为'countries'的数组,该数组包含大约5-10个类型为'Country'的结构体。数组的每个循环在HStack中创建一个按钮,按钮动作设置一个变量,该变量等于被点击的国家(传递到下一个视图)
**让我给予一个问题的例子:**假设for循环加载,我点击哥斯达黎加。假设countrySelected变量应设置为哥斯达黎加,fullScreenCover应为true。加载下一个视图,并显示不正确的国家。如果我回去选择同一个国家,它也会做同样的事情。只有在我选择了一个不同的国家后,它才开始工作。
不确定是什么导致了这个问题。我知道我可以使用导航链接来使它工作,但在我的情况下,我不能使用它。任何帮助是赞赏!
下面是showingCountryPage,如果为true,将激活fullScreenCover和countrySelected,它将跟踪在for循环中单击哪个国家按钮
@State private var showingCountryPage = false
@State var countrySelected = Country(name: "Brazil", code: "BR", continent: "South America")
下面是国家数组的示例
@State var countries = [Country(name: "France", code: "FR", continent: "Europe"), Country(name: "United States", code: "US", continent: "North America")].shuffled()
下面是视图中for循环的代码
HStack(spacing: 12){
Text(" ")
ForEach(countries, id: \.self){country in
Button(action: {
self.countrySelected = country
showingCountryPage = true
}){
ZStack(alignment: .center){
ZStack{
Image(country.code.lowercased() + "1")
.resizable()
.scaledToFill()
.frame(width: 200, height: 150)
.clipped()
Color.white
.opacity(0)
.frame(width: 200, height: 150)
.background(
LinearGradient(gradient: Gradient(colors: [.clear, .black, .clear]), startPoint: .top, endPoint: .bottom).opacity(0.4))
}
Text(country.name)
.font(.custom(
"Poppins-SemiBold",
fixedSize: 18))
.foregroundColor(.white)
.padding()
.multilineTextAlignment(.center)
.shadow(color: .black.opacity(0.25), radius: 1, x: 0, y: 0)
}.frame(width: 200, height: 150).cornerRadius(10).padding(.vertical)
}.fullScreenCover(isPresented: $showingCountryPage, content: {NavigationView{ViewCountryHome(country: countrySelected)}})
}
}
}.padding(.top, 5)
1条答案
按热度按时间8ljdwjyq1#
使用
.fullScreenCover(item:...)
尝试这种方法,例如:不需要
showingCountryPage
。