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

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

标题输入框

其次是标题输入框,输入框使用到TextField输入框组件,我们需要提前使用@State声明好参数,如下代码所示:

@State var title: String
@State var isEditing = false

上述代码中,title变量为标题输入框输入的内容,isEditing变量则是检测当前输入框是否正在输入,用于状态检测和交互使用。

标题输入框的内容样式构建如下:

// MARK: 标题输入框
func titleView() -> some View {
    TextField("请输入标题", text: $title, onEditingChanged: { editingChanged in
        self.isEditing = editingChanged
    })
    .padding()
}

image.png

内容输入框

再次是内容输入框,与标题输入框不同,内容输入框可以输入多行的文字,因此这里使用的是TextEditor多行文本输入框,和TextField输入框组件使用方法类似,首先需要使用@State声明好参数,如下代码所示:

@State var content: String

上述代码中,content变量为TextEditor内容输入框输入的内容,紧接着,内容输入框的内容样式构建如下:

// MARK: 内容输入框
func contentView() -> some View {
    ZStack(alignment: .topLeading) {
        TextEditor(text: $content)
            .font(.system(size: 17))
            .padding()
        if content.isEmpty {
            Text("请输入内容")
                .foregroundColor(Color(UIColor.placeholderText))
                .padding(20)
        }
    }
}

上述代码中,我们创建了一个新的视图contentView内容输入框视图,在这里由于TextEditor多行文本输入框不像TextField输入框组件可以设置提示文字,因此输入开发者自己实现。

我们实现的方法也很简单,使用ZStack层叠容器,当content输入的内容为空的时候,构建展示一个“请输入内容”文字,如此便实现了多行文本框的提示文字效果。

标题输入框titleView和内容输入框contentView的布局方式为纵向布局关系,我们可以使用VStack垂直布局使用,分割线部分可以使用SwiftUI提供的Divider分割线容器。如下代码所示:

NavigationView {
    VStack{
        Divider()
        titleView()
        Divider()
        contentView()
    }
        .navigationBarTitle("新建笔记", displayMode: .inline)
        .navigationBarItems(leading: closeBtnView(), trailing: saveBtnView())
}

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

image.png

交互逻辑

完成了“新建笔记”的页面样式后,我们再来完成基础的页面交互。

关闭弹窗

在ContentView首页我们使用.sheet修饰符触发打开“新建笔记“页面,并使用showNewNoteView触发打开模态弹窗,当showNewNoteView切换为true时,打开“新建笔记”弹窗页面。

这里可以使用@Binding在NewNoteView页面双向绑定showNewNoteView参数,然后当点击“关闭”按钮时,切换showNewNoteView状态。

首先声明showNewNoteView参数,如下代码所示:

@Binding var showNewNoteView: Bool

我们将点击“关闭”按钮时,切换showNewNoteView状态,如下代码所示:

self.showNewNoteView = false

image.png

由于NewNoteView新建笔记页面也在使用PreviewProvider预览,因此在该页面声明的所有没有默认值的变量,都需要创建变量默认值才能进行预览。

完成后,我们还需要回到ContentView首页,对NewNoteView的参数进行双向绑定,如下图所示:

image.png

项目预览

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

image.png

本章小结

由于项目较长,这里将分成几个章节完成,请按耐住性子一步一步完成。

在本章中,我们完成了“新建笔记”页面,首次使用了TextField输入框、TextEditor多行文本输入框,并学会使用@Binding声明可双向绑定的变量,并实现“首页”页面、“新建笔记”页面之间的逻辑交互。

本章内容不多,也不太难,重要的是思维方式。很多时候页面的构建方式都是自上而下,然后逐步拆解的过程,而从代码来看又呈现自下而上构建页面的逻辑。

在编程过程中,每一块内容我们几乎都采用抽离的方式,除了使用func定义View视图的方式,也可以更常用地使用建立子视图的方式创建View视图,因人而异吧。

接下来的章节,我们将继续完成交互逻辑部分,请保持期待吧~

快来动手试试吧~

相关文章
|
9天前
|
存储 编解码 JSON
利用SwiftUI构建高效iOS天气应用
【4月更文挑战第21天】 在本文中,我们将深入探讨如何运用SwiftUI框架打造一个响应迅速且用户友好的iOS天气应用程序。我们将重点放在利用SwiftUI的声明式语法简化界面开发,并通过结合Core Location和Networking APIs实现实时天气数据的获取与展示。文章将详细阐述整个开发过程,包括API集成、数据模型设计、用户界面布局以及动态适配不同屏幕尺寸的策略。
|
27天前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。
|
2月前
|
开发框架 移动开发 JavaScript
SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
正如优秀的软件设计一样,uni-app把一些移动端常用的功能做成了独立的服务或者插件,我们在使用的时候只需要选择使用即可。但是在使用这些服务或者插件时一定要区分其提供的各种服务和插件的使用场景,例如其提供的【uni-starter快速开发项目模版】几乎集成了移动端所需的所有基础功能,使用非常方便,但是其许可协议只允许对接其uniCloud的JS开发服务端,不允许对接自己的php、java等其他后台系统。
153 2
|
3月前
|
算法 Java Android开发
安卓逆向 -- 实战某峰窝APP(静态分析)
安卓逆向 -- 实战某峰窝APP(静态分析)
26 0
|
3月前
|
网络协议 算法 Android开发
安卓逆向 -- 实战某峰窝APP(动态分析)
安卓逆向 -- 实战某峰窝APP(动态分析)
35 4
|
4月前
|
存储 Web App开发 iOS开发
Electron 从基础到实战笔记 - Electron App对象及其事件
Electron 从基础到实战笔记 - Electron App对象及其事件
123 0
|
存储 安全 测试技术
《iOS取证实战:调查、分析与移动安全》一导读
本书适用于对iPhone和其他iOS设备感兴趣的读者,尤其适合那些对设备中能恢复的存储数据类型感兴趣的读者阅读。
1349 0
|
安全 iOS开发
《iOS取证实战:调查、分析与移动安全》一3.9 参考文献
本节书摘来自华章出版社《iOS取证实战:调查、分析与移动安全》一书中的第3章,第3.9节,作者(美)Andrew Hoog Katie Strzempka,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1011 0
|
存储 安全 iOS开发
《iOS取证实战:调查、分析与移动安全》一3.5 存储器类型
本节书摘来自华章出版社《iOS取证实战:调查、分析与移动安全》一书中的第3章,第3.6节,作者(美)Andrew Hoog Katie Strzempka,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1214 0
|
安全 数据安全/隐私保护 iOS开发
《iOS取证实战:调查、分析与移动安全》一2.6 小结
本节书摘来自华章出版社《iOS取证实战:调查、分析与移动安全》一书中的第2章,第2.6节,作者(美)Andrew Hoog Katie Strzempka,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1081 0