实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(4)

简介: 实战教程·元宇宙来了,准备好你的电子名片了吗?(七)

交互动作:打开EditView编辑页面

完成后,我们回到ContentView主页中,我们来实现页面跳转的逻辑。首先我们先声明一个用于页面跳转的参数,如下代码所示:


@State var showEditView: Bool = false

然后在CardView视图中增加页面跳转的方法,这里也可以使用Sheet修饰符,如下代码所示:


// 打开编辑弹窗
.sheet(isPresented: self.$showEditView, onDismiss: {self.showEditView = false }) {
    EditView(model: self.item ?? Model(platformIcon: "", title: "", platformName: "", indexURL: ""))
}

image.png

上述代码中,我们使用sheet修饰符用户打开模态弹窗,触发操作绑定声明好的变量showEditView,打开的模态弹窗的页面为EditView编辑页面。

由于EditView编辑页面需要传入参数,这里我们选择传入的对应model的参数为声明的item,当item不存在时,则默认传入一个符合Model格式的数据,避免报错。

对于编辑操作,我们可以给CardView增加多一个指示符,告知用户这个卡片是可以被编辑的,如下代码所示:


Image(systemName: "ellipsis")
  .padding()
  .foregroundColor(.black)
  .gesture(
    TapGesture()
    .onEnded({
      self.showEditView.toggle()
    })
  )

image.png

上述代码中,我们增加了一个Image图片到CardView视图中,当点击这个Image图片时,打开EditView编辑页面。

考虑到在ContentView我们已经使用NavigationLink顶部导航菜单进行跳转,那么如果我们给按钮增加点击事件,会存在两个点击事件冲突的情况。

我们先注释掉NavigationLink相关的代码,如下图所示:

image.png

完成后,我们点击刚刚创建的编辑按钮,预览下效果,如下图所示:

image.png

新增功能:编辑并更新内容

完成样式后,我们来实现下编辑更新的逻辑,来到ViewModel视图模型中,我们创建一个编辑并更新的方法,如下图所示:


// 编辑更新数据项
func editItem(item: Model) {
    if let id = models.firstIndex(where: { $0.id == item.id }) {
        models[id] = item
    }
}

image.png

编辑操作很简单,首先要找到点击编辑的数据项的ID在整个models数据集中的位置,更新后将更新内容赋予当前的ID,便实现了编辑更新操作。

回到EditView视图中,先引入ViewModel视图模型,如下代码所示:


var viewModel: ViewModel

然后在EditView视图预览时,给声明的viewModel赋予默认值,如下代码所示:


EditView(model: Model(platformIcon: "", title: "", platformName: "", indexURL: ""), viewModel: ViewModel())

image.png

由于我们在EditView视图声明了变量viewModel,因此在使用EditView视图的页面也要进行参数绑定。

我们来到ContentView文件,在CardView视图中,需要补充viewModel相关的参数,如下图所示:

image.png

绑定完成后,我们再回到EditView视图,在点击updateBtn更新按钮时,调用ViewModel视图模型中的editItem方法,如下代码所示:


self.viewModel.editItem(item: model)

image.png

如此,我们便实现了编辑更新的方法。


相关文章
|
Kubernetes NoSQL 网络协议
Boost实现简易服务器和客户端示例
Boost实现简易服务器和客户端示例
使用vue和element组件实现语音的上传和播放功能
大家好,今天和大家分享一下使用vue和element组件来实现语音上传和语音播放这个功能。 其实上传音频其实和上传图片差不多 下面的代码没有必要说都写下来,看自己需要什么
|
机器学习/深度学习 Python
LSTM神经网络实现对股市收盘价格的预测实战(python实现 附源码 超详细)
LSTM神经网络实现对股市收盘价格的预测实战(python实现 附源码 超详细)
504 0
|
存储 JSON 关系型数据库
基于GeoTools的GeoJson导入到PostGis实战
GeoJson是一种对各种地理数据结构进行编码的格式,基于json的地理空间信息数据交换格式。GeoJson对象可以用来表示几何,特征或者特征集合。支持地理点、线、面、多点、多线、多面及几何集合。GeoJson不是本文的重点,因此不再赘述。
2062 0
基于GeoTools的GeoJson导入到PostGis实战
|
9月前
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成
在现代软件开发过程中,自动化测试和持续集成已成为不可或缺的组成部分。本文将深入探讨自动化测试和持续集成的重要性、优势以及如何有效实施它们以提升软件质量和开发效率。通过具体案例分析,我们将展示这些技术如何在实际项目中发挥作用,并讨论其面临的挑战及应对策略。
221 60
|
11月前
|
Python Windows
python知识点100篇系列(24)- 简单强大的日志记录器loguru
【10月更文挑战第11天】Loguru 是一个功能强大的日志记录库,支持日志滚动、压缩、定时删除、高亮和告警等功能。安装简单,使用方便,可通过 `pip install loguru` 快速安装。支持将日志输出到终端或文件,并提供丰富的配置选项,如按时间或大小滚动日志、压缩日志文件等。还支持与邮件通知模块结合,实现邮件告警功能。
224 0
python知识点100篇系列(24)- 简单强大的日志记录器loguru
|
10月前
|
缓存 资源调度 Cloud Native
云原生架构下的性能优化实践与策略####
【10月更文挑战第26天】 本文深入探讨了云原生环境下性能优化的核心原则与实战技巧,旨在为开发者和企业提供一套系统性的方法,以应对日益复杂的微服务架构挑战。通过剖析真实案例,揭示在动态扩展、资源管理、以及服务间通信等方面的常见瓶颈,并提出针对性的优化策略,助力企业在云端环境中实现更高效、更稳定的应用部署。 ####
161 0
|
12月前
|
存储 搜索推荐 JavaScript
Java如何获取Cookie里的指定值
【9月更文挑战8天】
187 2
|
12月前
|
存储 负载均衡 数据库
探索后端技术:从服务器架构到数据库优化的实践之旅
在当今数字化时代,后端技术作为支撑网站和应用运行的核心,扮演着至关重要的角色。本文将带领读者深入后端技术的两大关键领域——服务器架构和数据库优化,通过实践案例揭示其背后的原理与技巧。无论是对于初学者还是经验丰富的开发者,这篇文章都将提供宝贵的见解和实用的知识,帮助读者在后端开发的道路上更进一步。
uniapp实战 —— 轮播图【自定义指示点】(含组件封装,自动注册全局组件,添加全局组件类型声明)
uniapp实战 —— 轮播图【自定义指示点】(含组件封装,自动注册全局组件,添加全局组件类型声明)
631 1