实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(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

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


相关文章
|
6月前
|
存储 JSON 缓存
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(1)
实战教程·元宇宙来了,准备好你的电子名片了吗?
47 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(1)
|
6月前
|
存储 安全 容器
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(5)
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)
41 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(5)
|
6月前
|
JSON API 数据格式
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)(4)
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)
41 0
|
6月前
|
存储 XML Swift
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)
48 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(2)
|
6月前
|
存储 JSON 测试技术
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)
30 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)(2)
|
6月前
|
存储 数据库 Swift
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(3)
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)
40 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(3)
|
6月前
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(5)
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)
29 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(5)
|
6月前
|
存储 JSON 前端开发
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)(3)
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)
37 0
|
6月前
|
Swift
实战教程·元宇宙来了,准备好你的电子名片了吗?(二)(1)
实战教程·元宇宙来了,准备好你的电子名片了吗?(二)
35 0
|
6月前
实战教程·元宇宙来了,准备好你的电子名片了吗?(六)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(六)
32 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(六)(2)