首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SwiftUI:不同层次问题中的popover + sheet

SwiftUI:不同层次问题中的popover + sheet
EN

Stack Overflow用户
提问于 2022-03-10 14:07:57
回答 1查看 230关注 0票数 0

我遇到了一个问题,提出了一个波波夫,然后试图提出一张床单。这张纸不能出示。

我准备了一个显示两个按钮的简短代码

  1. 第一个显示了一个弹出窗口(“单击此按钮”)
  2. 第二个显示了一个单张(“然后这个按钮”)

复制步骤

--可在iPad上复制--

单击第一个按钮,presented

  • Directly单击第二个按钮,而弹出按钮是可见的。(不以任何其他方式拒绝提交)国家:拒绝提交该文件,但未提交该页。用第二个按钮来呈现是不可能的。不过,popover按钮仍然有效。

错误

正在将下列消息打印到控制台:

代码语言:javascript
运行
复制
[Presentation] Attempt to present <_TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView_: 0x10bc13cf0> 
on <_TtGC7SwiftUI19UIHostingControllerV10AppBuilder8RootView_: 0x105a093f0>
(from <_TtGC7SwiftUI19UIHostingControllerV10AppBuilder8RootView_: 0x105a093f0>) 
which is already presenting <_TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView_: 0x10ba170a0>.

代码

代码语言:javascript
运行
复制
import SwiftUI

struct MyView: View {
    @State var showSheet: Bool = false
    
    struct SomeDeepView: View {
        @State var showPopover: Bool = false
        var body: some View {
            Button {
                showPopover = true
            } label: {
                Text("Click this button")
            }
            .popover(isPresented: $showPopover) {
                Text("Popover content")
            }
        }
    }
    
    var body: some View {
        VStack(spacing: 64) {
            
            SomeDeepView()
            
            Button {
                showSheet = true
            } label: {
                Text("Then this button")
            }
        }
        .sheet(isPresented: $showSheet) {
            Text("Sheet content")
        }
        .frame(width: 500, height: 500, alignment: .center)
    }
}

我的思想

MyView不应该关心SomeDeepView的内部内容。而且,SomeDeepView不应该太在意它的外部/父母。然而,我们不能同时展示一个爆米花和一张床单。我会接受这一点,因为我知道框架会处理这个问题,不会崩溃。然而,它确实会破裂。意外的副作用:通过更改,showSheet不再能够显示工作表。

任何想法和想法都是非常受欢迎的。谢谢

Edit1:我不认为toggle()是一种有效的解决方法,因为它引入了另一个bug。在它做出反应之前,你需要多次按下按钮。

EN

回答 1

Stack Overflow用户

发布于 2022-03-10 16:33:52

如果您将showSheet = true更改为showSheet.toggle(),则工作表将在第三次传递第二个按钮时显示。

除此之外,我猜您必须手动检查,当打开打开时,不能打开工作表.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71425496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档