网站首页 > 博客文章 正文
置顶
菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行
"不积跬步,无以至千里;不积小流,无以成江海"
继续
续接上篇文章,我们在一个简单的登陆界面中实现了表单提示,然后再自动聚焦到输入框中。
那么按照正常的登陆流程,接下来我们应该是进行跳转,然后展示一个带有底部导航栏的的页面
最终的结果如下:
在这里插入图片描述
重新整理逻辑
按照原定计划,我现在要做的是一个todolist的小app
那么我们重新整理一下初次进入的交互逻辑
- 打开是首页
- 发现没有登陆
- 弹出提示框请登录,这个框只有一个按钮,名为去登录
- 点击后弹出一个登陆界面,即我们之前编写的那个
- 登陆完成后关闭自己即可,即返回首页
一个新的页面
我们新建一个文件 IndexView.swift
这个文件为首页,除了上述的首页的登陆判断逻辑以及弹出登陆表单之外
它应该具有一个底部的tabbar
既然作为首页,首先就要修改入口文件处的引用
将 helloworldApp.swift 文件中的 ContentView() 改为 IndexView()
IndexView.swift 内容如下:
import SwiftUI
// 假设这里是 todo list 的页面
struct TodoView:View{
var body:some View{
Text("这里是todo页面")
}
}
// 假设这里是 设置的页面
struct SettingView:View{
var body:some View{
Text("这里是设置页面")
}
}
struct IndexView: View{
// 是否已经登陆
@State private var isLogin:Bool = false;
// 显示提示登陆
@State private var showAlert:Bool = true;
// 显示登陆表单
@State private var showLogin:Bool = false;
var body: some View{
VStack{
// 一个简单的tabview,底部导航栏
TabView {
TodoView()
.tabItem {
Image(systemName: "list.dash")
Text("TODO")
}
SettingView()
.tabItem {
Image(systemName: "gear.circle")
Text("设置")
}
}
.font(.headline)
}.alert(isPresented: $showAlert){
// 提示登陆的Alert
Alert(
title: Text("提示"),
message: isLogin ? Text("您已登录!") : Text("您尚未登陆,请登录!"),
dismissButton: isLogin ? .default(Text("好的")):.destructive(Text("去登录")){
// 显示login表单
showLogin = true;
}
)
}
// .sheet 会弹出一个类似vue中模态框的东西
// .sheet(isPresented:$showLogin,onDismiss: {
// // 避免被手动下滑关闭
// showLogin = true;
// } ,content: {
// ContentView()
// })
// 这种会直接弹出页面占据全屏
.fullScreenCover(isPresented: $showLogin ,content: {
ContentView()
})
}
}
struct IndexView_Previews: PreviewProvider {
static var previews: some View {
IndexView()
}
}
以下将 .fullScreenCover 和 .sheet 两种形式的结果都展示出来
这个是 fullScreenCover
这个是 .sheet
ContentView 中新增如下代码
struct ContentView: View {
@Environment(\.presentationMode) var presentationMode;
// ... 省略部分代码、
if(res == "登陆成功" || res == "请输入。。。"){
focus = .clear
// 这里需要返回首页,登陆成功后销毁本页面
self.presentationMode.wrappedValue.dismiss()
}
}
总结
- 这里只涉及到了跳转的 sheet 和 fullscreencover 两种形式
- 还有navigationView 后续在其他功能中介绍
- 登陆的状态没有被传递,导致了一些问题
- 如果类比vue组件的话,这里应该有组件间传值才更合理
猜你喜欢
- 2025-01-31 福建富昌维控申请人机界面设备识别方法及终端专利,降低识别时间
- 2025-01-31 上海三思取得拉索定位的吊挂式显示屏专利,使显示屏结构稳定
- 2025-01-31 凯晖电子取得分段触控显示屏及具有它的输入设备专利
- 2025-01-31 福建福昕申请通过自定义格式语言完成 3D 模型轻量化编辑与协作专利,实现室内设计跨平台 3D 模型轻量化编辑与协作
- 2025-01-31 FastAI + timm: 快速构建高性能计算机视觉模型
- 2025-01-31 翻译中的创意转化:如何调整视角与结构实现宣传效果
- 2025-01-31 (工具分享)计算机小白专业视频神器-通义万象
- 2025-01-31 最新版camera assistant新增两个功能…
- 2025-01-31 花旗:DeepSeek 潜在效率突破对软件行业的影响
- 2025-01-31 Android View(Android viewpager显示三个view)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)