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

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

界面设计:创建EditView编辑页面

完成单独的构件后,我们就可以来完成编辑页面的设计。创建一个新的SwiftUI文件,命名为EditView,如下图所示:

image.png

我们先搭建基础的样式,示例:顶部导航菜单、页面标题、关闭按钮等等,如下图所示:


import SwiftUI
struct EditView: View {
    @Environment(.presentationMode) var presentationMode
    var body: some View {
        NavigationStack {
            Text("Hello, World!")
                .navigationBarTitle("编辑身份卡", displayMode: .inline)
                .navigationBarItems(trailing: closeBtn())
        }
    }
    // 关闭按钮
    func closeBtn() -> some View {
        Button(action: {
            self.presentationMode.wrappedValue.dismiss()
        }) {
            Image(systemName: "xmark.circle.fill")
                .font(.system(size: 17))
                .foregroundColor(.gray)
        }
    }
}

image.png

上述代码中,我们基本和NewView页面的设计一样,使用NavigationStack搭建顶部导航菜单,并使用navigationBarTitle修饰符设置导航标题,使用navigationBarItems修饰符设置关闭页面按钮,并通过声明全局变量presentationMode和搭建单独的关闭按钮closeBtn来实现关闭编辑页面。

对于编辑保存按钮,样式和操作和NewView页面可能不一样,我们也单独构建按钮,如下代码所示:


// 编辑更新按钮
func updateBtn() -> some View {
    Button(action: {
        self.presentationMode.wrappedValue.dismiss()
    }) {
        Text("确定更新")
            .font(.system(size: 17))
            .foregroundColor(.white)
            .bold()
            .padding()
            .frame(maxWidth: .infinity)
            .background(Color.blue)
            .cornerRadius(8)
            .padding(.horizontal)
    }
}

完成后将编辑按钮updateBtn添加到EditView编辑页面视图中,如下代码所示:


VStack(spacing: 15) {
  updateBtn()
}

image.png

在引用构件之前,我们先来理解下数据关系。

EditView编辑页面和ContentView主页的数据关系是,用户在ContentView主页点击单张身份卡片,然后打开EditView编辑页面,并将ContentView主页身份卡片的数据传递到EditView编辑页面。

我们可以声明一个符合Model数据模型的参数,然后无论是TitleInputView、PlatformPicker、IndexURLView的参数都绑定Model数据模型的参数,然后该数据模型双向绑定到ContentView主页中,就可以将ContentView主页的数据传递过来,如下代码所示:


@State var model: Model

然后调用TitleInputView、PlatformPicker、IndexURLView构件,并且绑定model模型的值,如下代码所示:


VStack(spacing: 15) {
    TitleInputView(title: $model.title)
    PlatformPicker(platformIcon: $model.platformIcon, platformName: $model.platformName)
    IndexURLView(indexURL: $model.indexURL)
    updateBtn()
    Spacer()
}

image.png

相关文章
|
存储 JSON 缓存
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(1)
实战教程·元宇宙来了,准备好你的电子名片了吗?
79 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(1)
|
存储 安全 容器
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(5)
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)
63 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(5)
|
JSON API 数据格式
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)(4)
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)
65 0
|
存储 XML Swift
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)
76 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(2)
|
存储 JSON 测试技术
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)
52 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(五)(2)
|
存储 前端开发 数据库
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(6)
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)
60 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(6)
|
存储 数据库 Swift
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(3)
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)
72 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(3)
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)
61 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(七)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(六)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(六)
59 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(六)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(二)(2)
实战教程·元宇宙来了,准备好你的电子名片了吗?(二)
59 0
实战教程·元宇宙来了,准备好你的电子名片了吗?(二)(2)