首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SwiftUI导航立即取消视图?iOS 15

SwiftUI导航立即取消视图?iOS 15
EN

Stack Overflow用户
提问于 2022-02-20 10:27:27
回答 1查看 277关注 0票数 0

我正在创建一个编辑帐户信息导航从我的应用程序的主要视图之一,但当我推动第3或第4视图到堆栈,该视图立即被驳回?

有时,子B将留在堆栈中,有时它不会,但是Child C视图总是会立即被取消,并且这些视图中没有代码会导致这种行为.?

下面是导航堆栈图。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                               (auto dismissed)    (auto dismissed)
  Parent         CHILD A            CHILD B            CHILD C 
ProfileView -> SettingsMenu.   ->.  Account      ->   EditEmail

我遇到的问题是,我浏览到的任何来自“B”的视图都是,立即取消了,因此用户无法编辑他们的电子邮件、电话号码或性别。

我不知道出了什么问题,因为我在每个视图中将所有isActive属性存储为@State变量,以便以编程方式导航到相应的视图?

有什么不对吗??

概况(父母)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct ProfileView: View {
    @EnvironmentObject var session: SessionStore
    @StateObject var profileVM = ProfileViewModel()

    @State private var presentSettings: Bool = false

    var body: some View {
        NavigationView {
            List {
               //other content
                Text("Show settings menu").onTapGesture { presentSettings = true }
            } 
            .listStyle(PlainListStyle())
            .navigationViewStyle(StackNavigationViewStyle())
            .background (
                NavigationLink("", destination: Settings(), isActive: $presentSettings)
            )
        }
    }
}

从父级激活的导航视图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct Settings: View {
    @EnvironmentObject var session: SessionStore
    @Environment(\.presentationMode) var presentation
    
    @State private var presentAccount: Bool = false
    @State private var presentSecurity: Bool = false
    @State private var presentNotification: Bool = false
    
    var body: some View {
            VStack(spacing: 30) {
                AccountMenuTab()
                    .onTapGesture { presentAccount = true }
  
                SecurityMenuTab()
                    .onTapGesture { presentSecurity = true }
          
                NotificationTab()
                    .onTapGesture { presentNotification = true  }
             
            }
       // THESE VIEWS GET IMMEDIATELY DISMISSED ON NAVIGATION 
        .background ( NavigationLink("", destination: AccountTab(), isActive: $presentAccount))
        .background ( NavigationLink("", destination: SecuritySettings(), isActive: $presentSecurity))
        .background ( NavigationLink("", destination: UserNotificationsView(), isActive: $presentNotification))
    }
}

儿童B导航激活从儿童A,任何导航到另一个视图(编辑电子邮件,电话,或性别)立即被驳回?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct AccountTab: View {
    @EnvironmentObject var session : SessionStore
   
    @StateObject var accountVM = AccountTabViewModel()

    @State private var editEmail: Bool = false
    @State private var editPhone: Bool = false
    @State private var editGender: Bool = false

    var body: some View {
        VStack {
            Text("Email").onTapGesture { editEmail.toggle() }
            Text("Phone").onTapGesture { editPhone.toggle() }
            Text("Gender").onTapGesture { editGender.toggle() }
        }
        // BELOW VIEWS GET IMMEDIATELY DISMISSED AFTER NAVIGATION??
        .background ( NavigationLink("", destination: EditEmail(), isActive: $editEmail) )
        .background( NavigationLink("", destination: EditGender(), isActive: $editGender) )
        .background( NavigationLink("", destination: EditPhone(), isActive: $editPhone) )
           
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-20 12:38:15

不需要.onTapGesture.background ..。

它应该是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct ProfileView: View {
    
    var body: some View {
        NavigationView {
            List {
                Text("other content ...")
                //other content {
                NavigationLink("Show settings menu") {
                    Settings()
                }
            }
            .listStyle(PlainListStyle())
            .navigationViewStyle(StackNavigationViewStyle())
        }
    }
}


struct Settings: View {
    
    var body: some View {
        VStack(spacing: 30) {
            
            NavigationLink("Account Menu") {
                AccountTab()
            }
            NavigationLink("Security Menu") {
//                SecuritySettings()
            }
            NavigationLink("Notification Menu") {
//                UserNotificationsView()
            }
        }
    }
}


struct AccountTab: View {
        
    var body: some View {
        VStack {
            NavigationLink("Email") {
//                EditEmail()
                Text("Edit Mail")
            }
            NavigationLink("Phone") {
//                EditGender()
                Text("Edit Phone")
            }
            NavigationLink("Gender") {
//                EditPhone()
                Text("Edit Gender")
            }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71197456

复制
相关文章
bug是如何产生的?
领导:你看那隔壁那木房子就没有打地基,不要在小事上浪费时间,一个月水平面上面什么都看不到,你kpi不要了?
混说Linux
2022/07/14
3610
Bug是如何产生的?
我们不能完全杜绝与它接触,唯一能做的,就是提高我们自身的”免疫力“(俗称可用性或健壮性),让它尽可能的远离我们,影响不了我们。
陶朱公Boy
2023/10/23
2980
Bug是如何产生的?
漫画 | Bug是如何产生的?
今天这篇漫画的灵感来源于知乎的万赞回答,也有一部分原因是因为最近工作状态的真实写照吧, 它讲述的是程序员工作中的bug是如何产生的,以及作为一名优秀的程序员,如何把握好你跑路的时间呢?
苏南
2021/01/25
8690
Service中是如何产生ANR的?
Service有两种,前台服务超时为SERVICE_TIMEOUT=20S 后台服务超时为SERVICE_BACKGROUD_TIMEOUT=200S 根据变量ProcessRecord.execServicesFg来决定是前台服务还是后台服务 Service TimeOut是位于“ActivityManager”线程中的AMS.MainHandler收到SERVICE_TIMEOUT_MSG消息时触发。
北洋
2021/12/08
8130
Service中是如何产生ANR的?
Service中是如何产生ANR的?
Service有两种,前台服务超时为SERVICE_TIMEOUT=20S 后台服务超时为SERVICE_BACKGROUD_TIMEOUT=200S 根据变量ProcessRecord.execServicesFg来决定是前台服务还是后台服务 Service TimeOut是位于“ActivityManager”线程中的AMS.MainHandler收到SERVICE_TIMEOUT_MSG消息时触发。
小柔
2022/10/09
6020
Service中是如何产生ANR的?
实战分享 | 你知道这个死锁是怎么产生的吗?
| 作者 王文安,腾讯CSIG数据库专项的数据库工程师,主要负责腾讯云数据库 MySQL 的相关的工作,热爱技术,欢迎留言进行交流。 ---- Part1 背景 锁作为 MySQL 知识体系的主要部分之一,是每个 DBA 都需要学习和掌握的知识。锁保证了数据库在并发的场景下数据的一致性,同时锁冲突也是影响数据库性能的因素之一。而锁冲突中,有一类很经典的场景经常会拿出来讨论:死锁。最近刚好也遇到了一个典型的死锁案例,本文会基于这个案例,做一次详细的分析与拆解。 Part2 问题 由于innodb engi
腾讯云数据库 TencentDB
2020/11/12
6220
Kubernetes 中 Evicted pod 是如何产生的
最近在线上发现很多实例处于 Evicted 状态,通过 pod yaml 可以看到实例是因为节点资源不足被驱逐,但是这些实例并没有被自动清理,平台的大部分用户在操作时看到服务下面出现 Evicted 实例时会以为服务有问题或者平台有问题的错觉,影响了用户的体验。而这部分 Evicted 状态的 Pod 在底层关联的容器其实已经被销毁了,对用户的服务也不会产生什么影响,也就是说只有一个 Pod 空壳在 k8s 中保存着,但需要人为手动清理。本文会分析为什么为产生 Evicted 实例、为什么 Evicted 实例没有被自动清理以及如何进行自动清理。
米开朗基杨
2021/10/18
1K0
Kubernetes 中 Evicted pod 是如何产生的
kubernetes 中 Evicted pod 是如何产生的
最近在线上发现很多实例处于 Evicted 状态,通过 pod yaml 可以看到实例是因为节点资源不足被驱逐,但是这些实例并没有被自动清理,平台的大部分用户在操作时看到服务下面出现 Evicted 实例时会以为服务有问题或者平台有问题的错觉,影响了用户的体验。而这部分 Evicted 状态的 Pod 在底层关联的容器其实已经被销毁了,对用户的服务也不会产生什么影响,也就是说只有一个 Pod 空壳在 k8s 中保存着,但需要人为手动清理。本文会分析为什么为产生 Evicted 实例、为什么 Evicted 实例没有被自动清理以及如何进行自动清理。
田飞雨
2021/10/08
5.4K0
Kubernetes 中 Evicted pod 是如何产生的
最近在线上发现很多实例处于 Evicted 状态,通过 pod yaml 可以看到实例是因为节点资源不足被驱逐,但是这些实例并没有被自动清理,平台的大部分用户在操作时看到服务下面出现 Evicted 实例时会以为服务有问题或者平台有问题的错觉,影响了用户的体验。而这部分 Evicted 状态的 Pod 在底层关联的容器其实已经被销毁了,对用户的服务也不会产生什么影响,也就是说只有一个 Pod 空壳在 k8s 中保存着,但需要人为手动清理。本文会分析为什么为产生 Evicted 实例、为什么 Evicted 实例没有被自动清理以及如何进行自动清理。
公众号: 云原生生态圈
2021/11/23
7610
逻辑运算符是什么 逻辑运算符的种类
逻辑思维在现实生活中的作用是非常大的。培养逻辑思维,能够游刃有余的解决很多问题。在科技发展的今天,计算机也是有逻辑思维的,而且它的路逻辑思维和能力甚至比人类还要强大。逻辑运算符相信大家并不陌生,尤其对于程序员来说,在工作中时常会用到逻辑运算符。今天就来一起了解一下逻辑运算符是什么?
用户8739990
2021/07/09
2.2K0
逻辑运算符是什么 逻辑运算符的种类
工作后的成长速度是如何产生差异的?
不要因为钱跳槽,为个人能力和背书增值而跳槽 当你面临选择时 平台,待遇,个人成长与空间,团队,行业 你更看重什么? 一定没有十全十美的选择 赋权排序吧 几年前原团队内有个小伙伴收到了迅雷和UC的Offer 最终选择了迅雷,因为多开了2K 然后UC变成了阿里UC,迅雷现在靠区块链实现股票上涨 不要辜负时间 在原岗位做出了成绩证明自己的价值后再走 那个时候精气神是不一样 讨价还价也有余地 哪里都会有坑和不如意 跳槽并不能一劳永逸,也许能解决上家公司的问题,但不能解决所有职场问题 重点是你当时
范蠡
2018/04/04
6560
“香山”处理器产生背后的逻辑
作者 | 老石谈芯的老石 来源 | 老石谈芯 在最近召开的RISC-V中国峰会上,中科院计算所的包云岗研究员团队正式发布了名为“香山”的开源高性能RISC-V处理器。前不久我有幸和包老师就这个事情做了一次深度的交流,我们聊了关于RISC-V、还有“香山”处理器的前世今生。包老师也分享了很多他关于开源硬件、新型开发语言、硬件敏捷设计、还有处理器基础架构等等这些问题的想法和学术思考,我深受启发。 包云岗简介 包云岗老师是中科院计算技术研究所研究员、副所长,先进计算机系统研究中心主任,中国科学院大学特聘教授,
AI科技大本营
2023/05/08
5330
“香山”处理器产生背后的逻辑
RxSwift核心逻辑——序列的产生以及订阅
RxSwift是Swift的一套响应式编程框架,如同OC的RAC。响应式编程的核心如下图:(来源于中文文档)。
CC老师
2022/01/12
5770
RxSwift核心逻辑——序列的产生以及订阅
Java的逻辑运算符
与运算符(&&)在两个操作数都为true时返回true。如果其中任何一个操作数为false,则返回false。以下是一个示例:
玖叁叁
2023/05/06
2910
我是如何看这个世界
首先这里要感谢大家支持。公众号第一篇文章发出后不到一星期就有500人关注,另外文章还被阿里天池的官方公众号转载,非常高兴能得到大家的认可。这段时间有很多朋友提供了宝贵的帮助和建议,包括一些大V主动转载并推荐我的公众号,小伟不胜感激。我这个人有一说一,别人对我的好我都会一直记着,你帮了我,日后若有需要尽管开口,我一定加倍帮你。
用户9656380
2022/04/14
5900
我是如何看这个世界
SQL的逻辑运算符和比较运算符
SQL是一种结构化查询语言,用于管理和操作关系型数据库。SQL中的逻辑运算符和比较运算符是进行数据筛选和比较的基础工具,本文将介绍SQL中常用的逻辑运算符和比较运算符,并给出示例进行说明。
玖叁叁
2023/04/11
1.1K0
Shell 基本运算符--逻辑运算符
逻辑运算符 以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20: 运算符 说明 举例 && 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false || 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true 逻辑运算符实例如下: #!/bin/bash a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "返回 true" else
陈不成i
2021/06/23
8310
有趣的赋值逻辑运算符
我们在写js逻辑的时候,不可否认的用到了很多逻辑的运算符,像||、&&这些,那么我们基本都是在三元运算符或者if判断里进行使用,那么我们其实可以在赋值的时候一样的使用,今天我们就看看怎么使用它来写一些看起来比较牛逼的代码!
何处锦绣不灰堆
2020/05/28
9040
计算机木马是如何产生的?原理是什么?
作为一个从业十几年的程序员来分析下计算机木马原理,计算机木马原来称呼为特洛伊木马,主要流传于古希腊,攻城不对久攻不下,于是让人专门制作了一个体积非常大的马,把士兵装进去然后攻城的时候故意仍在城墙边上,结果城里的人当成战利品把木马弄成城里,结果半夜藏在里面的士兵出来,偷偷把城门打开了,随即把城池拿下,就是典型的特洛伊木马案例,电脑的木马原理和这个最接近。近些年发生在国内的大规模的木马中毒事件,熊猫烧香病毒,就是典型的木马入侵案例,木马对计算机系统和网络都有相当大的危害。
程序员互动联盟
2018/12/13
2.5K0
计算机木马是如何产生的?原理是什么?
点击加载更多

相似问题

这个HashSet是如何产生排序输出的?

44

这个意外的比较输出是如何产生的?

20

这个逻辑与运算符是做什么的?

36

逻辑模式-产生预期的输出

16

解释输出是如何产生的

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文