首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当单击另一个按钮(SwiftUI)时,如何更改另一个按钮的操作?

当单击另一个按钮(SwiftUI)时,如何更改另一个按钮的操作?
EN

Stack Overflow用户
提问于 2021-08-26 06:11:21
回答 2查看 597关注 0票数 0

在我的应用程序中,我有一个按钮,每次按下都会输出一个特定的警报。但是,我希望这样,当我单击该按钮10次时,该按钮的操作和标签将发生变化,因为我希望将其转换为重新启动按钮。我怎样做呢?

换句话说,当按钮没有名称时,我如何引用它并修改它的属性?

“”斯威夫特

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
           Button(action: { alertIsVisible = true
                
            }) {
                Text(buttonText)
                    .fontWeight(.bold)
                    .padding()
                    .background(Color.blue)
                    .foregroundColor(.white)
                    .cornerRadius(20)
                    
                
            }
            .alert(isPresented: $alertIsVisible, content: {
                let roundedValue = Int(sliderValue.rounded())
                let points = game.points(sliderValue: roundedValue)
                
                    return Alert(title: Text("Hello!"), message: Text("The slider's value is \(roundedValue).\n" + "You scored \(points) points this round"), dismissButton: .cancel(
                        
                                    {game.target = Int.random(in: 1...100)
                                        roundTracker += 1
                                        scoreTracker += points
                                    }
                        ))
                    
                })

“”“

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-26 06:21:19

下面是一个示例,其中计数器被存储为一个@State。当counter到达10时,它会显示“重新启动”按钮。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct ContentView: View {
    @State private var counter = 0

    var body: some View {
        if counter < 10 {
            Button("Press") {
                print("button pressed: \(counter)")
                counter += 1
            }
        } else {
            Button("Restart") {
                print("restart...")
                counter = 0
            }
        }
    }
}

结果:

票数 0
EN

Stack Overflow用户

发布于 2021-08-26 06:43:51

您可以根据一个label变量的值来更改ButtonButtoncounter (如果它是用属性包装器@State很好地声明的)

我在这里用了三元操作符:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct CounterView: View {
    @State private var counter: Int = 0
    var exceeded: Bool  { counter >= 10 }
    func restart() {
        // do something
        counter = 0
    }
    func increment() {
        counter += 1
    }
    
    var body: some View {
        Button(exceeded ? "Restart" : "Increment", action: exceeded ? restart : increment)
    }
}

编辑:

当然,您可以使用经典的if/else,而不是三元操作符。但它将破坏 any 动画,如本例所示(使用if / else,这是两个不同的按钮,动画由一个经典转换代替,默认情况下淡入/淡出):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct CounterView: View {
    @State private var counter: Int = 0
    var exceeded: Bool { counter >= 1 }
    func restart() {
        withAnimation(.linear(duration: 2)) {
            counter = 0
        }
    }
    func increment() {
        counter += 1
    }
    var body: some View {
        VStack {
            Button(exceeded ? "Restart" : "Increment", action: exceeded ? restart : increment)
                .foregroundColor(.red)
                .scaleEffect(exceeded ? 2 : 1)
            if exceeded {
                Button("Restart", action: restart)
                .scaleEffect(exceeded ? 2 : 1)
            } else {
                Button("Increment", action: increment)
                .scaleEffect(exceeded ? 2 : 1)
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68940168

复制
相关文章
Ubuntu 17.04(Zesty Zapus)正式版发布
今天,2017 年 4 月 13 日,Canonical 官方发布了 Ubuntu 17.04(Zesty Zapus)的最终版。自从去年十月发布 Ubuntu 16.10(Yakkety Yak)起,它已经开发了将近 6 个月。
Debian中国
2018/12/20
7420
linux内核版本介绍_ubuntu内核版本查看
你可以在这里得到Ubuntu版本及它相应的内核的列表。4.10 Warty Warthog 2.6.8
全栈程序员站长
2022/09/23
3.5K0
在 Ubuntu Linux 上安装最新的 Erlang
Erlang 在 Ubuntu 的 Universe 仓库 中可用。启用该仓库后,你可以使用下面的命令轻松安装它:
用户8965210
2021/09/27
2.9K0
在 Windows 平板(Z3735F)上安装 Ubuntu
手里头有台六年前买的 Windows 平板——昂达 V891W。预装系统 Win8,采用当年有着英特尔补贴而被寨厂们钟爱的 Z3735F 芯片方案,以及勉强能用的 2G 内存和 32G 的 emmc——不过随着前两年升级几次 Win10 后,它的系统盘基本被系统更新占满,卡得没法再用了。
贤羽
2022/06/09
12.5K2
在 Windows 平板(Z3735F)上安装 Ubuntu
Ubuntu 16.04.2 安装Linux kernel 4.10 内核并解决 VMware 问题
Linux kernel 4.10 发布了,据说有很多提升,那么可以常鲜看看,Ubuntu 16.04.2 安装Linux kernel 4.10 内核方法如下:
用户8710643
2021/06/09
1K0
最新版 Harbor 在ubuntu系统上安装
The latest version of Harbor is installed on the ubuntu system
小陈运维
2021/10/13
5280
Ubuntu 17.04 桌面版安装指南超多截图
Ubuntu 17.04的正式发布是Linux桌面爱好者的好消息。 Ubuntu 17.04的代号是Zesty Zapus,因为它不是LTS版本,所以它的支持仅在未来9个月可用(2018年1月)。 Ubuntu 17.04中发现的一些变化如下所示:
知忆
2021/06/21
8970
在Ubuntu上安装Minikube
为了方便开发者体验Kubernetes,社区提供了可以在本地部署的Minikube。由于在国内网络环境内,无法顺利的安装使用Minikube,我们可以从阿里云的镜像地址来获取所需Docker镜像和配置。
mazhen
2023/11/24
9691
在Ubuntu上安装ReviewBoard
因为ReviewBoard在Windows上停止更新了,所以了解如何在Linux系统安装ReviewBoard是很有必要的。笔者只在Apache+MySQL+Ubuntu下实现过,其余均参考官方安装文档:http://www.reviewboard.org/docs/manual/dev/admin/installation/linux/。 [Note] 安装过程中如碰到报错问题,自行谷歌或者百度,大部分均可解决。有些是软件版本问题,比如之前用Ubuntu 12.04有个软件包用easy_install安装的版本一直低于安装ReviewBoard的要求,升级成Ubuntu 13.04之后就没问题了。
星哥玩云
2022/07/01
1.5K0
在 Ubuntu 上安装 MySQL
在 Ubuntu 中安装 Mysql 最方便方式是用 MySQL 自己的 APT 仓库。 APT 仓库中包含了 MySQL 的服务器和工具相关的软件。我们需要将此 MySQL APT 仓库添加到系统的包源列表中。
不惑
2023/09/23
1.2K0
在ubuntu上编译prometheus
prometheus的编译并不难,核心是要将编译环境配置到符合要求的地步,否则就会出现各种错误,而且难以排查。 我们主要需要关心go、npm和nodejs的版本。 以下步骤亲测有效。
方亮
2024/05/24
1450
在ubuntu上编译prometheus
RabbitMQ在Ubuntu上的环境搭建
环境配置 Ubuntu Server 18.04 RabbitMQ 3.6.10 安装之前 我们使用apt-get进行RabbitMQ安装,在安装之前,强烈建议您把apt源换位国内,大大增加下载安装的速度,点击查看:《Ubuntu apt-get和pip国内源更换》 安装rabbitmq-server sudo apt-get update sudo apt-get install rabbitmq-server 服务常用命令 启动rabbit服务:service rabbitmq-server star
磊哥
2018/07/04
1K0
Git在Ubuntu上的配置方法
  本文介绍在Linux操作系统的Ubuntu版本中,配置分布式开源版本控制系统Git,随后基于Git克隆GitHub中项目的代码的详细方法。
疯狂学习GIS
2024/07/31
2120
Git在Ubuntu上的配置方法
如何在Ubuntu 18.04上安装最新的MySQL
MySQL是一个着名的开源数据库管理系统,用于存储和检索各种流行应用程序的数据。MySQL是LAMP堆栈中的M,是一组常用的开源软件,也包括Linux,Apache Web服务器和PHP编程语言。
angel_郁
2018/10/16
2.3K0
「  简述一次无U盘安装Ubuntu系统在z8700寨板上的思路  」
寨板的usb和typec供电有问题,在安装linux类系统时会出问题,所以采用本地划分分区的方法引导安装Ubuntu
青益
2023/02/28
2.2K0
「  简述一次无U盘安装Ubuntu系统在z8700寨板上的思路  」
如何在Ubuntu 22.04上安装Linux 内核 6.0?
内核是任何基于 Linux 的操作系统的核心部分,它充当计算机系统软件和硬件之间的桥梁,还提供用户和应用程序与计算机交互所需的接口。内核提供了许多功能,包括进程调度、资源分配、设备管理、中断处理、内存管理和进程。
网络技术联盟站
2022/11/16
4.4K3
如何在Ubuntu 22.04上安装Linux 内核 6.0?
在Ubuntu上搭建Hadoop群集
前面我搭建的Hadoop都是单机伪分布式的,并不能真正感受到Hadoop的最大特点,分布式存储和分布式计算。所以我打算在虚拟机中同时开启3台机器,实现分布式的Hadoop群集。
深蓝studyzy
2022/06/16
6940
在Ubuntu上搭建Hadoop群集
在 Ubuntu 上安装Microsoft Edge[通俗易懂]
1.要安装Microsoft Edge,你首先需要在终端中运行这些命令,在设备上设置微软的存储库。
全栈程序员站长
2022/09/13
2.3K0
在Ubuntu 16.04上安装WordPress
在本指南中,您将学习如何在运行Ubuntu 16.04的Linode上安装WordPress。WordPress是一个流行的动态内容管理系统,专注于博客。WordPress可以部署在LAMP或LEMP堆栈上,并具有广泛的插件框架和主题系统,允许网站所有者和开发人员使用其简单但功能强大的发布工具。
Techeek
2018/09/17
5.2K0
在Ubuntu 16.04上安装WordPress
在Ubuntu 18.04上安装WordPress
WordPress是一个非常流行的专注于博客的动态内容管理系统(CMS)。WordPress可以部署在LAMP或LEMP堆栈上。它具有的可扩展插件框架和主题系统允许网站所有者使用其简单但功能强大的发布工具。
eru
2018/09/05
7.8K0
在Ubuntu 18.04上安装WordPress

相似问题

华硕USB-AC68 68 [0b05:1817]驱动?

30

Ubuntu 17.04 Z校Zapus中的持久性问题

10

在16.04安装Z校Zapus (17.04)更新版本的R

10

Ubuntu 16.04用4.10内核冻结

10

以某种方式在内核4.10 Ubuntu 16.04上结束

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文