动态更改从数组创建的按钮的按钮标签和标题(快速)

2024-04-07

我的环境:下面的代码是在我公司 iPad 上的 swift Playgrounds 4 中编写的。

项目目标:我正在努力改进学校的课堂管理工具,它基本上是一个纸质交通灯,每个学生都有一个衣夹。我想要一个应用程序,其中我的 28 个学生都由一个按钮代表,每个按钮应该在点击 4 次时从绿色变为黄色,如果再点击三次则变为红色。作为一项不错的功能,按钮选项卡(又名警告)的总数应显示在按钮上。此外,按钮应该以有意义的方式构建(就像我学生的表格;7 x 4 网格)。

到目前为止我的进展:我编写了一个类(学生),并创建了该类的实例来代表我最喜欢的四个学生。我将它们打包到一个数组(学生)中,以便轻松地为每个人创建一个按钮。在此类中,“状态”是学生被警告的次数(已点击按钮),“颜色”应该是相应按钮的颜色。

在撰写本文时,我需要一个变量(col)来处理颜色。我认为这是不必要的,但没有让颜色变化以不同的方式工作。

在网格中构建之后,我为数组中的每个元素(学生)创建一个按钮。在按下按钮时,相应学生的状态和颜色都会更新,并且(出于我未知的原因)列也会更新。

然后按钮的标签显示相应学生的姓名、状态和颜色……是吗?

我此时的问题:状态(如按钮上显示的)仅在颜色更改时更新,并且当更改时,它会更改所有按钮的颜色,而不仅仅是一个按钮的颜色。我希望按钮单独更改颜色,并且标签在每次按下按钮时更新。遗憾的是我还没有找到正确的语法来做到这一点。

我的问题:

如何在我的班级中设置默认颜色(绿色)? 如何说服我的按钮单独改变颜色? 如何让我的标签在 ButtonPress 上更新?

提前致谢!

Code

import SwiftUI

public class student{
    public var first: String
    public var last: String
    public var state: Int
    public var color: Color
    public init(first: String, last: String, color: Color){
        self.first = first
        self.last = last
        state = Int()
        self.color = color
    }
}
var John = student(first: "John", last: "Lennon", color: .green)
var Paul = student(first: "Paul", last: "McCartney", color: .green)
var Georg = student(first: "Georg", last: "Harrison", color: .green)
var Ringo = student(first: "Ringo", last: "Starr", color: .green)

var students = [John, Paul, Georg, Ringo]

struct ContentView: View {
    
    @State private var col = Color.green
    
    let columnLayout = Array(repeating: GridItem(), count: 7)
    
    
    var body: some View {
        NavigationView{
            ScrollView{
                LazyVGrid(columns: columnLayout){
                    ForEach(students, id: \.last) { student in
                        
                        Button{
                            student.state += 1
                            //print(student.state)
                            
                            if (student.state < 4) {
                                student.color = .green
                            }
                            
                            else if (student.state >= 7){
                                student.color = .red
                            }
                            
                            else {
                                student.color = .yellow
                            }
                            
                            col = student.color
                            //print(col)
                            
                        } label:{
                            ZStack{
                                RoundedRectangle(cornerRadius: 10, style: .continuous)
                                    .foregroundColor(col)
                                    .aspectRatio(2.0, contentMode: ContentMode.fit)
                                
                                Text("\(student.first) - \(student.state)")
                                    .foregroundColor(.black)
                                //.font(.largeTitle)
                                    .scaledToFit()
                            }
                        }
                    }
                }
            }.navigationTitle("Classroom Management")
        }.navigationViewStyle(.stack)
    }
}


这里有几个问题。首先,在 SwiftUI 中,通常您希望您的模型是struct,因为 SwiftUI 视图能够很好地响应值类型的变化(例如struct) 盒子外面。

public struct Student {
    public var first: String
    public var last: String
    public var state: Int
    public var color: Color
    public init(first: String, last: String, color: Color){
        self.first = first
        self.last = last
        state = Int()
        self.color = color
    }
}

var john = Student(first: "John", last: "Lennon", color: .green)
var paul = Student(first: "Paul", last: "McCartney", color: .green)
var georg = Student(first: "Georg", last: "Harrison", color: .green)
var ringo = Student(first: "Ringo", last: "Starr", color: .green)

请注意,我还对您的代码进行了一些更改,以使用大写类型名称和小写变量名称的 Swift 约定。

接下来,由于您正在尝试更改Students,你会想用一个来代表他们@State大批。然后,通过在ForEach行(参见$字符),您可以获得每个字符的参考Student您可以修改。

struct ContentView: View {
    
    @State private var students = [john, paul, georg, ringo]
    
    let columnLayout = Array(repeating: GridItem(), count: 7)
    
    var body: some View {
        NavigationView{
            ScrollView{
                LazyVGrid(columns: columnLayout){
                    ForEach($students, id: \.last) { $student in
                        
                        Button{
                            student.state += 1
                            
                            if (student.state < 4) {
                                student.color = .green
                            }
                            
                            else if (student.state >= 7){
                                student.color = .red
                            }
                            
                            else {
                                student.color = .yellow
                            }
                            
                        } label:{
                            ZStack{
                                RoundedRectangle(cornerRadius: 10, style: .continuous)
                                    .foregroundColor(student.color)
                                    .aspectRatio(2.0, contentMode: .fit)
                                
                                Text("\(student.first) - \(student.state)")
                                    .foregroundColor(.black)
                                    .scaledToFit()
                            }
                        }
                    }
                }
            }.navigationTitle("Classroom Management")
        }.navigationViewStyle(.stack)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态更改从数组创建的按钮的按钮标签和标题(快速) 的相关文章

  • 在 Firebase 中为 TextView Swift 保存字体和大小的方法是什么

    我想在 Firebase 中保存 Swift 中 TextView 的字体 大小和对齐方式 这样我就可以在另一个视图中调用它 我只能将颜色保存在 Firebase 中 这是显示我是如何做到的的代码 IBAction func SendBtn
  • Foreach Ajax Json - Jquery

    谁能帮我 我有一个数组 stars Chris Pine Keira Knightley Kevin Costner 我想做的是 foreach star 我想将输入附加到 div 和 foreach star 它们在输入中具有值 这就是我
  • SwiftUI 更新主菜单 [已解决] kludgey

    真正的问题 你如何更新mainMenu在 SwiftUI 中 它真的可以工作吗 我在 SwiftUI 中构建了一个基于 MacOS 文档的应用程序 其中包括所有内置的文件菜单命令 即关闭 保存 复制 重命名 等 在保存文档之前 我会验证结构
  • 将构造函数传递给 Array.map?

    我怎样才能做这样的事情 var a 1 2 3 4 a map Date constructor 此代码在 Google V8 上引发错误 SyntaxError Unexpected number 我也尝试过 a map Date con
  • 如何将 numpy rearray 的子集转换为连续数组?

    我有一个recarray来自读取 csv 文件 我有兴趣将列的子集转换为连续浮点数组 我想避免将它们转换为列表或将它们一一堆叠 我尝试了中的建议https stackoverflow com a 11792956 https stackov
  • 如何从 Javascript/Typescript 中的数组对象计算运行总计并使用 HTML 在每个实例上显示输出?

    我正在开发一个 MEAN 堆栈项目 并且有一个如下所示的数组 savings any 300 450 350 500 我还有一个名为 saving bf 的变量 它是从数据库中检索的结转储蓄 其值如下 savings bf 15000 我想
  • 如果一个多维数组中的子数组与另一个多维数组不同,则覆盖该子数组

    我坚持这个问题 真的不知道如何解决 我有两个多维数组 需要将第二个数组中的每个 entry id 与第一个数组进行匹配 然后需要检查第二个数组中的每个 file no 是否在数据库 第一个数组 中 并且 status 是否与第一个数组匹配
  • 在completionHandlers中存储值 - Swift

    我正在创建一个completionHandler它返回一个字典 但是当我在另一个类中调用这个方法时 它的值是零 func fetchLatestPosts completionHandler responseDict NSDictionar
  • 删除具有estimatedItemSize 的项目时 UICollectionView 单元格大小会调整

    我有一个简单的项目 其中的故事板仅包含一个UICollectionViewController 使用 Xcode 7 1 1 为 iOS 9 1 构建 class ViewController UICollectionViewControl
  • HStack 中的 SwiftUI EditButton 未激活编辑模式

    作为更大表单的一部分 我希望有一个带有列表的部分 其条目可以重新排序 在整个视图中 应该只能编辑该特定列表 而不能编辑其他内容 因此我希望将编辑按钮放在列表附近 如果我只是将 EditButton 设置为节标题 则可以对列表项重新排序 但无
  • Swift 包管理器:“多个目标名为...”

    我正在尝试构建一个服务器端 Swift Web 应用程序 我的应用程序的基础框架将是Kitura https www kitura io来自IBM 此外 我还想利用AWS SDK Swift https github com noppoMa
  • C# Byte[] 转 BCD 和 BCD 转 INT

    我有一个由 CashRegister Machine 创建的 Hex 文件 我必须读入这个文件 文件使用下面详述的格式 它就像套接字数据包 代码数据 2字节PLU 代码数据 7 字节单价数据 5字节数量数据 5字节数据总量 5字节PLU 名
  • Swift:无法为“[UIViewController]”类型的值添加下标?

    我试图弄清楚如何在 Xcode 7 iOS9 上的 Swift 中解决此问题 并且我也遇到此错误 无法为 UIViewController 类型的值添加下标 索引类型为 Int 任何建议表示赞赏 谢谢 My code func indexP
  • 在 Swift 中将动态 Int 变量从一个类传递到另一个类

    我是 swift 2 的新手 我陷入了将变量从一个类传递到另一个类的过程中 我有一个类 GameScene 我有一个公共变量score并且在更新功能中不断更新 我想发送score两个节点相互碰撞时的值 一旦它发生碰撞 我就会使用 mainv
  • 如何在 perl 中合并两个数组,交替每个数组中的值

    假设我有 2 个如下所示的数组 a1 Vinay Raj harry b1 dude rock 合并后我想要这样的结果 Vinay dude Vinay rock Raj dude Raj rock harry dude harry roc
  • let/var 如何解决可变性? [复制]

    这个问题在这里已经有答案了 我没有任何问题 我只是想对有关可变性的问题进行一些澄清 在 Objective C 中我们会使用例如NSMutableArray得到一个可变数组和NSArray得到一个不可变的 我对两者的内部运作了解不多 但据我
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 来自索引范围 Swift 的新数组

    我怎样才能做这样的事情 从数组中取出前 n 个元素 newNumbers numbers 0 n 目前出现以下错误 error could not find an overload for subscript that accepts th
  • 二维数组的 MPI 数据类型

    我需要将一个整数数组的数组 基本上是一个二维数组 从根传递给所有处理器 我在 C 程序中使用 MPI 如何声明二维数组的 MPI 数据类型以及如何发送消息 我应该使用广播还是分散 你需要使用播送 http www netlib org ut
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何

随机推荐

  • PySpark 在嵌套数组中反转 StringIndexer

    我正在使用 PySpark 使用 ALS 进行协作过滤 我原来的用户和项目 ID 是字符串 所以我使用StringIndexer将它们转换为数字索引 PySpark 的 ALS 模型要求我们这样做 安装模型后 我可以获得每个用户的前 3 个
  • 无法在 Python OpenCV v4.20 中使用 SIFT

    我正在使用 OpenCV v4 20 和 PyCharm IDE 我想使用 SIFT 算法 但我收到这个错误 我在互联网上寻找此错误的解决方案 但没有一个对我有帮助 你知道这个错误的解决办法吗 使用 pip 我可以安装至少 3 4 2 16
  • 一个 dataGridView 中的两个实体

    我有两个关联实体 我通过从对象数据源拖放并手动绑定到列表来创建 dataGridView 一个实体的一切工作都很好 是否有可能通过拖放 手动填充来创建一个具有两个实体 Zamow和ZamSkany 的dataGridView 我可以通过视图
  • 无 IDLE 子进程连接

    我是 python 编程新手 想尝试在 IDLE 而不是 OSX 命令行中编辑脚本 但是 当我尝试启动它时 它给出错误 空闲子进程没有建立连接 空闲子进程无法启动子进程或个人防火墙软件阻止连接 我没有配置防火墙 那么问题可能是什么 您可以尝
  • 在列表视图滚动期间,首先显示错误的图像,然后显示正确的图像

    I am using listview with images in my application But whenever I scroll the list the wrong images are shown first and th
  • 使用 MVVM 模式挂钩 Storyboard.Complete 事件

    基本上 我得到的是一个简单的警报消息设置 有一个单独警报的视图 其中一些数据绑定到虚拟机的文本和颜色 绿色表示成功 红色表示错误等
  • 在 MS PowerPoint 中查找并突出显示文本

    我使用此站点中的一些代码创建了一个宏 用于在 Word 文档上进行关键字搜索并突出显示结果 我想在 PowerPoint 中复制这种效果 这是我的 Word 代码 Sub HighlightKeywords Dim range As ran
  • Java:将出生数据转换为天数

    我真的需要一些关于具体任务的帮助 用户输入出生数据 YYYY MM DD 程序会告诉您您的年龄 以天为单位 控制台中的输出将是 例如 您出生于 1981 年 11 月 6 日 您已经 7068 天了 我已经重写了我的代码大约 20 次但没有
  • 使用 HTML 5 的进度条(下载)

    我正在开发一个需要从数据库下载内容的项目 通常使用手机 高端智能手机 访问该网站 我想知道是否可以在使用 HTML5 下载内容的过程中添加进度条 以便在执行此操作时会在整个屏幕上出现一个灯箱 并且只显示进度条 可以使用 XMLHttpReq
  • NSArray 越界检查

    菜鸟问题 检查 NSArray 或 NSMutableArray 的索引是否存在的最佳方法是什么 我到处找都没有结果 这是我尝试过的 if sections arr objectAtIndex 4 or sections arr objec
  • 为什么 Firefox 会截断我的 中的文本?

    我有一个简单的
  • 芹菜“重试”并更新参数

    考虑一个任务将列表作为参数并处理列表中的每个元素 这可能会成功也可能会失败 在这种情况下 如何仅对失败的元素进行 重试 Example app task bind True def my test self my list list new
  • 在 bash 脚本中模拟用户输入[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在创建自己的 bash 脚本 但目前陷入困境 基本上 该脚本将用于在 CentOS 中自动设置服务器 某些软件通常要求用户输入密码 我希望脚本将我
  • 将复选框添加到 ASP.NET 网格视图

    我正在尝试在我的网络应用程序中启用批量删除 我显示的数据位于GridView我想添加一列 其中每一行包含一个复选框 或任何替代选项 用户可以标记要删除的行 然后立即删除所有行 当我添加一个CheckBoxField 它必须绑定到我自然在数据
  • 删除元素时映射迭代器如何失效? [复制]

    这个问题在这里已经有答案了 使用擦除方法时 迭代器何时以及如何在映射中失效 例如 std map lt int int gt aMap aMap 33 1 aMap 42 10000 aMap 69 100 aMap 666 1 std m
  • WordPress 到 Jekyll 脚本抛出错误

    我已经为这个问题苦苦挣扎了一天左右 但无法弄清楚发生了什么 我正在尝试运行一个脚本将我的 Wordpress sql 导入 Jekyll 并将所有内容转换为 Markdown 但每次我运行脚本 在 Mac 和 Ubuntu 上 时都会收到错
  • Python定时器回调方法

    from threading import Timer class test timer def init self self awesum hh self timer Timer 1 self say hello args WOW def
  • 在 Grails 中使用 Groovy++ 的经验

    有人尝试过在幕后实现一个包含 Groovy 的 Grails 解决方案吗 Groovy 使用 Groovy 1 7 5 并包含将 G 与 Grails 集成的插件
  • 当键盘在 Flutter TextField 中可见时,键盘顶部有大量空白

    这是我的代码 build BuildContext context return new Scaffold body new SafeArea child new ListView builder itemBuilder itemBuild
  • 动态更改从数组创建的按钮的按钮标签和标题(快速)

    我的环境 下面的代码是在我公司 iPad 上的 swift Playgrounds 4 中编写的 项目目标 我正在努力改进学校的课堂管理工具 它基本上是一个纸质交通灯 每个学生都有一个衣夹 我想要一个应用程序 其中我的 28 个学生都由一个