实战编程·使用SwiftUI从0到1完成一款iOS笔记App(二)(1)

简介: 实战编程·使用SwiftUI从0到1完成一款iOS笔记App(二)

实战编程·使用SwiftUI从0到1完成一款iOS笔记App(二)


前提回顾

在上一章节中,我们从需求分析出发,经历产品原型设计、产品UI设计,到笔记App首页的实战编程开发,走出了从0到1完成一款iOS笔记应用的第一步。

下面,我们将继续完成笔记App的其他部分内容。

笔记App按照页面来划分,可以分为首页、新建笔记页面,在上一章我们完成了首页的编程,这一章节我们来看看“新建笔记”页面。如下图所示:

image.png

我们可以看到“新建笔记”页面和“首页”是层叠关系,即“新建笔记”页面是在首页的基础上,由下而上展开的弹窗。这种产品设计方式在之前的章节我们提及过,是一种中度提醒操作,用户的主观感受还放在首页上,基于首页编辑内容的一种交互形式。

在SwiftUI编程中,此类弹窗统称为ModelView模态弹窗。

模态弹窗

模态弹窗,是一种以临时出现的形式显示内容,需要明确的操作才能退出的弹窗。其主要目的有2个,一是帮助用户专注于一个独立任务或一组相关选项。二是确保用户接收到重要信息,并在必要时确保操作正确。

我们来设计简单的模态弹窗,模态弹窗需要有两个页面作为交互基点,我们先创建一个新的SwiftUI页面,命名为NewNoteView。如下图所示:

image.png

创建完成后,回到ContentView,定义模态弹窗的触发条件,通常使用Bool值作为触发条件,如下代码所示:


@State var showNewNoteView = false

模态弹窗的跳转需要使用到使用.sheet修饰符,绑定声明好的Bool值变量,如下代码所示:

NavigationView {
  ZStack {
    if noteItems.count == 0 {
      noDataView()
    } else {
      VStack {
        searchBarView()
        NoteListView()
      }
    }
    newBtnView()
  }
  .navigationBarTitle("念头笔记", displayMode: .inline)
}.sheet(isPresented: $showNewNoteView) {
            NewNoteView()
}

image.png

上述代码中,我们将.sheet修饰符修饰整个NavigationView包裹的首页视图,isPresented模态弹窗的触发动作绑定声明好的变量showNewNoteView,跳转的页面为新创建的NewNoteView。

最后是跳转的动作,当用户点击“新建笔记”按钮时,切换showNewNoteView以触发打开模态弹窗的动作,如下代码所示:

self.showNewNoteView = true

运行预览效果如下图所示:

image.png

新建笔记页面

来到NewNoteView页面,我们来完成“新建笔记”页面的相关样式内容,依旧是从上至下拆解页面元素,如下图所示:

image.png

“新建笔记”页面有顶部导航栏、标题输入框、内容输入框三块要素组成。

顶部导航栏

首先是顶部导航栏,顶栏由“关闭”按钮,“新建笔记”标题,“完成”按钮组成,标题我们可以使用NavigationView构建,如下代码所示:


NavigationView {
  Text("Hello, World!")
    .navigationBarTitle("新建笔记",displayMode: .inline)
}

image.png

按钮部分,我们可以单独构建按钮的样式,如下代码所示:


// MARK: 关闭按钮
func closeBtnView() -> some View {
    Button(action: {
    }) {
        Image(systemName: "xmark.circle.fill")
            .font(.system(size: 17))
            .foregroundColor(.gray)
    }
}
// MARK: 完成按钮
func saveBtnView() -> some View {
    Button(action: {
    }) {
        Text("完成")
            .font(.system(size: 17))
    }
}

下一步,我们只需要将这两个按钮加到NavigationView顶部导航上就可以了,这里使用到的修饰符是navigationBarItems,如下代码所示:

NavigationView {
    Text("Hello, World!")
        .navigationBarTitle("新建笔记", displayMode: .inline)
        .navigationBarItems(leading:closeBtnView(),trailing: saveBtnView())
}


相关文章
|
12月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1938 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
12月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1236 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
12月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1295 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
12月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
549 0
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
1515 0
|
人工智能 IDE 前端开发
写给尊贵的 Tare Pro 用户的喂饭级 IOS APP 开发指南
本文介绍了如何利用 AI IDE Trae,从零开始快速开发一个 iOS 应用《回声》。通过 AI 辅助完成需求梳理、原型设计、编码与调试,展示了 AI 在整个开发流程中的强大助力。
2837 0
|
存储 移动开发 监控
App Trace功能实战:一键拉起、快速安装与免提写邀请码的应用实践
App Trace系统通过一键拉起、快速安装和免提写邀请码三大功能,显著提升用户转化率、安装成功率和邀请注册率。结合深度技术实现与优化,助力公司用户增长,成为移动端核心基础设施。
|
12月前
|
缓存 移动开发 JavaScript
如何优化UniApp开发的App的启动速度?
如何优化UniApp开发的App的启动速度?
1724 139
|
12月前
|
移动开发 JavaScript weex
UniApp开发的App在启动速度方面有哪些优势和劣势?
UniApp开发的App在启动速度方面有哪些优势和劣势?
783 137