SwiftUI:处理从&"For-In&"中生成的单个项目环形 [英] SwiftUI: Manipulate single Items generated from "For - In" loop

查看:49
本文介绍了SwiftUI:处理从&"For-In&"中生成的单个项目环形的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

喂,

简介

这个想法是要创建一个问答游戏,其中您有不同数量的按钮,一个答案是正确".其他是错误的".当选择任何按钮的"的颜色;右按钮"应该变成绿色,其余的变成红色.

The idea is to create a quiz game in which you have a varying amount of buttons, one answer is "right" the others are "wrong". When selecting any button the color of the "right button" should turn green, the rest turn red.

应用程序的工作方式

该应用程序从名为LectureTopics的Swift文件中加载所有数据(请参见下文).LectureTopics是一个结构,其中包含许多变量(ButtonText,ButtoneAnswerCorrect(布尔)描述等)以及包含这些变量的内容(级别1、2等)的扩展.

The App loads all the data from a Swift file called LectureTopics (See Below). LectureTopics is a struct that contains a lot of variables (ButtonText, ButtoneAnswerCorrect (Bool) Descriptions etc.) and an extension that holds the content for those variabels (Level 1, 2 etc.)

问题

我正在创建几个带有"for in"的按钮.循环(请参见下文).但是,所有按钮都会变成红色或绿色.该应用程序已经知道哪个按钮是错误的或正确的.为此,我使用了"Level0ButValue".变量(请参见下文).但是,从理论上讲,应该只将正确答案变成绿色,而将其他答案变成红色.真的很感谢任何帮助.我还是编程新手:-)预先谢谢你!

I am creating several buttons with a "for in" loop (see below). However either all buttons turn red or green. The App already knows which button is wrong or right. For that I use the "Level0ButValue" variable (see below). However it should in theory only turn the right answer green and the others red. Would really appreciate any kinds of help. I am still new to programming :-) Thank you in advance!

struct Level0View: View {
    
    let lectureTopic: LectureTopic
    @State var Thacolor:String = "BlueAccent"
    
    var body: some View {
        
        VStack{
            Text(lectureTopic.Level0Name)
            .font(Font.custom("Arial", size: 24))
            .multilineTextAlignment(.center)
            .padding(.bottom)
            .padding()
            
            Text(lectureTopic.Level0Text)
            .font(Font.custom("Arial", size: 18))
            .multilineTextAlignment(.center)
            .padding()
            
            Text(lectureTopic.Level0Question)
            .font(Font.custom("Arial", size: 22))
            .fontWeight(.heavy)
            
            Spacer()
            
            VStack{
            
            ForEach(0..<self.lectureTopic.Level0Buttons.count)
            { number in
                
            Spacer()
                
            Button(action:
            {
                if self.lectureTopic.Level0ButValue[number] == true
                {
                    self.Thacolor = "GreenAccent"
                }
                else
                {
                    self.Thacolor = "RedAccent"
                }
            })
            {
            Text(self.lectureTopic.Level0Buttons[number])
            }
            .foregroundColor(.white)
            .padding()
            .padding([.leading, .trailing])
            .background(Color(self.Thacolor))
            .cornerRadius(10)
            }
            
            Spacer()
                
            Image("Window1")
                .resizable()
                .frame(width: 420, height: 190)
            
            }
            
        }
    
}
}

struct Level0View_Previews: PreviewProvider {
    static var previews: some View {
        Level0View(lectureTopic: LectureTopic.all()[0])
    }
}



struct LectureTopic: Identifiable {
    
    var id = UUID()
    let LectureTitle: String
    let MainMenuText: String
    let MainImage: String
    let OverviewText: String
    let Level0Name: String
    let Level0Text: String
    let Level0Question: String
    let Level0Buttons: [String]
    let Level0ButValue: [Bool]
    let Level1Name: String
    let Level1Text: String
  
}

extension LectureTopic
{
    static func all() -> [LectureTopic]
    {
        return
        [
            LectureTopic(
                LectureTitle: "Basics",
                MainMenuText: "Hier lernst du die Basics, von der Jobsuche bis hin zu allgemeinen Informationen.",
                MainImage: "Window1",
                OverviewText: "Nach drei Semestern studieren sucht Tim nach einer Möglichkeit erste, fachliche Berufserfahrung zu sammeln. Hierzu macht er sich auf die Suche nach einem Job den er neben dem Studium ausüben kann. ",
                Level0Name: "Wie kann Tim?",
                Level0Text: "Frage",
                Level0Question: "Text11",
                Level0Buttons: ["hi","Mu","Na"],
                Level0ButValue: [true,false,false],
                Level1Name: "alalal",
                Level1Text: "Jojo"),
            
        ]
    }
}

推荐答案

由于要在选择一个按钮后立即更改所有按钮的颜色,因此需要一个 @State 变量反映了这一点.

Since you want to change the colors of all of the buttons as soon as one is selected, then you need a @State variable that reflects that.

添加:

@State private var answered = false

然后您的按钮将设置 self.answered = true .按钮的颜色取决于 answered self.lectureTopic.Level0ButValue [number] 的状态:

Then your buttons will set self.answered = true. The color of the button will depend on the state of answered and self.lectureTopic.Level0ButValue[number]:

Button(action:
{
    self.answered = true
})
{
    Text(self.lectureTopic.Level0Buttons[number])
}
.foregroundColor(.white)
.padding()
.padding([.leading, .trailing])
.background(Color(self.answered ? (self.lectureTopic.Level0ButValue[number] ? "GreenAccent" : "RedAccent") : "BlueAccent")))
.cornerRadius(10)

这篇关于SwiftUI:处理从&amp;"For-In&amp;"中生成的单个项目环形的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆