实战编程·使用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视图,因人而异吧。

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

快来动手试试吧~

相关文章
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
778 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
1618 0
|
人工智能 IDE 前端开发
写给尊贵的 Tare Pro 用户的喂饭级 IOS APP 开发指南
本文介绍了如何利用 AI IDE Trae,从零开始快速开发一个 iOS 应用《回声》。通过 AI 辅助完成需求梳理、原型设计、编码与调试,展示了 AI 在整个开发流程中的强大助力。
2923 0
|
Swift iOS开发 开发者
苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡
苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡
3707 13
苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡
|
存储 数据安全/隐私保护 开发者
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
1273 8
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
794 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
888 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
633 0
|
缓存 移动开发 JavaScript
如何优化UniApp开发的App的启动速度?
如何优化UniApp开发的App的启动速度?
1883 139
|
移动开发 JavaScript weex
UniApp开发的App在启动速度方面有哪些优势和劣势?
UniApp开发的App在启动速度方面有哪些优势和劣势?
864 137

热门文章

最新文章