首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让SwiftUI SidebarMenu每次都显示相同的DetailView,而不是创建一个新的(在macOS上)

在SwiftUI中,可以使用NavigationView和NavigationLink来实现侧边栏菜单和详细视图之间的导航。默认情况下,每次点击菜单项时,都会创建一个新的详细视图。如果希望每次点击菜单项时都显示相同的详细视图,可以使用@State属性包装详细视图,并在导航链接中使用该属性。

以下是一个示例代码,演示如何实现这个功能:

代码语言:txt
复制
import SwiftUI

struct ContentView: View {
    @State private var selectedMenuItem: MenuItem? = nil
    
    var body: some View {
        NavigationView {
            List {
                ForEach(MenuItem.allCases, id: \.self) { item in
                    NavigationLink(destination: DetailView(selectedMenuItem: $selectedMenuItem)) {
                        Text(item.rawValue)
                    }
                }
            }
            .listStyle(SidebarListStyle())
            
            if let selectedItem = selectedMenuItem {
                DetailView(selectedMenuItem: $selectedItem)
            } else {
                Text("Select a menu item")
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
            }
        }
    }
}

struct DetailView: View {
    @Binding var selectedMenuItem: MenuItem
    
    var body: some View {
        VStack {
            Text(selectedMenuItem.rawValue)
                .font(.largeTitle)
            
            // Add your content here
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}

enum MenuItem: String, CaseIterable {
    case item1
    case item2
    case item3
    // Add more menu items if needed
}

在上面的代码中,我们使用了@State属性包装了selectedMenuItem变量,以便在ContentView和DetailView之间进行双向绑定。每次点击菜单项时,selectedMenuItem的值都会更新,从而导致DetailView重新渲染。

请注意,这只是一个示例代码,你可以根据自己的需求进行修改和扩展。另外,这里没有提及任何特定的云计算品牌商,你可以根据自己的需求选择合适的云计算平台和产品。

希望这个答案能够满足你的需求,如果有任何问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SwiftUI 4.0 的全新导航系统

SwiftUI 4.0( iOS 16+ 、macOS 13+ )对导航系统作出了重大改变,提供了以视图堆栈为管理对象的新 API ,让开发者可以轻松实现编程式导航。本文将对新的导航系统作以介绍。...动态控制多栏显示状态 另一个之前困扰多栏 NavigationView 的问题就是,无法通过编程的手段动态地控制多栏显示状态。...,例如,在 macOS 上,detalOnly 不会起作用 如果想在 SwiftUI 4.0 之前的版本上使用类似的功能,可以参考我在 用 NavigationViewKit 增强 SwiftUI 的导航视图...相当一部分开发者由于版本适配的原因并不会使用新的 API ,因此,每个人都需要认真考虑如下问题: 如何从新 API 中获得灵感 如何在老版本中运用编程式导航思想 如何让新老版本的程序都能享受系统提供的便利...另一方面,新导航系统也向每一个开发者传递了明确的信号,苹果希望应用能够为 iPad 和 macOS 提供更加符合各自设备特点的 UI 界面。

10.4K62

【愚公系列】《AIGC辅助软件开发》013-AI辅助客户端编程:AI辅助 iOS 应用开发

- **Publisher 和 Subscriber**:学习如何创建 Publisher 并订阅数据流。 **实践**: - 使用 Combine 创建一个简单的网络请求并在界面中显示结果。...- `Button("Increment") { ... }`: 创建一个按钮,点击时 `count` 增加 1。- 其余修饰符与前面示例相同,设置按钮的样式。### 5....- `DetailView`: 这是一个新的视图,显示 "This is the detail view" 文本。### 8....### 基本用法- **`.padding()`**:默认情况下,会在视图的四个边(上、下、左、右)都添加一个默认的内边距。内边距的大小由系统决定,通常是 16 个点。...很明显,AI没有理解我的意思。它把所有视图都叠起来了,但这不是我想要的效果,我想要的是 U贴着手机顶部显示。这时候就需要自己微调了。

9010
  • Ask Apple 2022 与 SwiftUI 有关的问答(上)

    是否关于如何使用多个场景的指导或例子?或者大多数应用程序只需要一个 WindowGroup ?A:多场景对于建立复杂的应用程序是很有用的,特别是在 macOS 上。...最近,我注意到 SwiftUI 视图的 onAppear 在意想不到的时间启动,比如当 UITabBarController 被创建时,而不是当视图本身出现时。...WindowGroup 和 OpenWindowActionQ:在 macOS 上是否可以在创建新窗口时附加参数?我在同一个子上下文中创建一个新的托管对象,并希望将这个对象发送到一个新的窗口。...A:在 macOS Ventura 中,我们在 [WindowGroup 上引入了新的 API](https://developer.apple.com/documentation/swiftui/windowgroup...image-20221022135907441为 Stepper 添加快捷键Q:我们如何为 SwiftUI 的 Stepper( 在 MacOS 上 )添加增量和减量操作的快捷键?

    12.3K20

    解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

    众所周知,SwiftUI 是一个响应式框架,这意味着,当数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示时,应直接对状态进行修改。...本文将解析 SwiftUI 中两个由于未能贯彻响应式编程原则而导致的严重错误,并提供相应的解决方案。...而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了的先调整状态,后更新视图的操作。...再次执行上述过程,您会发现在返回上层视图后,应用并不会锁死,一切都恢复了正常。然而,明显地,强迫用户点击 “Dismiss” 按钮并不是一个好的选择,特别是在没有屏蔽手势取消 Sheet 的情况下。...当视图正在滚动时返回上一层视图会导致应用崩溃这是一个由 xiaogd 在我的 Discord 论坛中提出的 问题。

    761110

    肘子的 Swift 周报 #046| 无警告编译并非 Swift 6 的初衷

    相反,我们应该在深入理解 Swift 新并发工具的基础上,重新思考如何构建既符合编译需求又真正安全可靠的代码结构。...[4] 开发者在处理多个项目时,往往会遇到不同的编码风格和约定,这使得每次切换项目时都需要手动调整 Xcode 的编辑器设置,这不仅麻烦,还容易出现不一致的代码格式问题。...★值得注意的是,在 Xcode 16 beta 6 中,每次修改 EditorConfig 配置后,需要重启 Xcode ,新配置才能起作用,这是一个已知 Bug。...SwiftUI for Mac 2024[5] Sarah Reichelt[6] 在本文中,Sarah Reichelt 探讨了 SwiftUI 在 2024 年的一些新特性。...作者认为,随着技术的演进,开发工具的改进是不可避免的,重要的是如何借助这些工具更高效地构建优质软件,而不是纠结于手写代码的过程。

    11610

    Ask Apple 2022 与 SwiftUI 有关的问答(下)

    因此,如果你正在创建一个视图来显示可滚动的内容,并可能进行选择操作,那么在 iOS 和 macOS 上使用 List 将有最好的体验。...Table 中上下文菜单Q:如果我在 TABLE 上添加了一个上下文菜单,我如何确定哪一行导致了菜单的显示(无需选择该行)?...创建从底部开始的滚动视图Q:我如何实现一个在底部对齐的滚动视图,在 macOS 上会不会有糟糕的性能?...因为这些使用并不有害,我们不希望开发者因为使用了新的编译器版本而处理一堆的警告。...macOS APIQ:对于运行 Monterey 的 Mac,能否如何在 SwiftUI 中实现下面需求的建议:打开一个窗口在该窗口中初始化数据找到所有打开的窗口确定一个窗口是否打开从不在该窗口的视图中关闭一个窗口

    14.8K30

    打造可适配多平台的 SwiftUI 应用

    这样就失去了多窗口存在的意义。图片为什么会出现这种情况呢?我们都知道 SwiftUI 是一个声明式框架。...由于 iPhone 只支持单窗口模式,通常我们不会太注意它的存在,但在 iPadOS 以及 macOS 这些支持多窗口的系统中,则代表着,每次创建一个新窗口(在 macOS 中,通过菜单中的新建来创建新窗口...图片尽管系统在创建新场景(新窗口)时会为其创建一棵新的视图树,但由于为新场景的根视图注入的仍然是同一个 Store 实例,因此尽管场景不同,但在不同的窗口中获取的应用状态完全一致。...我认为,开发者应根据需要采用适宜的手段,而不必拘泥于某种特定的数据流理论或框架。最后,我们来谈谈在将“电影猎手”适配到 macOS 时,碰到的另外一个与数据源有关的问题。...图片这是因为,在 macOS 中,使用 Settings 来声明 Settings 窗口同样是创建了一个新的场景,会创建一棵独立的视图树。

    3.2K80

    解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug

    众所周知,SwiftUI 是一个响应式框架,这意味着,当数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示时,应直接对状态进行修改。...本文将解析 SwiftUI 中两个由于未能贯彻响应式编程原则而导致的严重错误,并提供相应的解决方案。...通过手势取消 Sheet 后,快速右滑导航容器会导致应用锁死 这是一个在 SwiftUI 所有版本中存在的错误,你可以在众多的论坛或聊天室里看到不少的开发者都在寻找解决方法。...然而,明显地,强迫用户点击 “Dismiss” 按钮并不是一个好的选择,特别是在没有屏蔽手势取消 Sheet 的情况下。...当视图正在滚动时返回上一层视图会导致应用崩溃 这是一个由 xiaogd 在我的 Discord 论坛中提出的 问题[3]。

    37020

    打造可适配多平台的 SwiftUI 应用

    我们都知道 SwiftUI 是一个声明式框架。这不仅意味着开发者可以通过声明的方式来构造视图,而且场景(对应着独立的窗口)甚至整个 App 都是基于声明式代码来创建的。...由于 iPhone 只支持单窗口模式,通常我们不会太注意它的存在,但在 iPadOS 以及 macOS 这些支持多窗口的系统中,则代表着,每次创建一个新窗口(在 macOS 中,通过菜单中的新建来创建新窗口...image-20230424092927467 尽管系统在创建新场景(新窗口)时会为其创建一棵新的视图树,但由于为新场景的根视图注入的仍然是同一个 Store 实例,因此尽管场景不同,但在不同的窗口中获取的应用状态完全一致...我认为,开发者应根据需要采用适宜的手段,而不必拘泥于某种特定的数据流理论或框架。 最后,我们来谈谈在将“电影猎手”适配到 macOS 时,碰到的另外一个与数据源有关的问题。...iShot_2023-04-24_10.33.03.2023-04-24 10_34_15 这是因为,在 macOS 中,使用 Settings 来声明 Settings 窗口同样是创建了一个新的场景,

    2.1K10

    SwiftUI-数据流

    SwiftUI中的界面是严格数据驱动的:运行时界面的修改,只能通过修改数据来间接完成,而不是直接对界面进行修改操作。...5.1 的新特性 Property Wrapper来实现的一种属性装饰语法糖(修饰器/装饰器) Property 这种形式最简单,就是在 View中定义常量或者变量,然后在内部使用 import SwiftUI...用@State修饰的属性,只要属性改变,SwiftUI 内部会自动的重新计算 View的body部分,构建出View Tree,由于 View 都是结构体,SwiftUI 每次构建这个 View Tree...@Binding 传统的 GUI 程序中最复杂的部分莫过于状态管理,尤其是多数据同步,一个数据存在于不同的 UI 中,针对某个数据导致的 UI 变化理论上应该同步,状态量的变多加上异步的操作,会使程序的可读性直线下降...ObservableObject 在应用开发过程中,很多数据其实并不是在 View 内部产生的,这些数据有可能是一些本地存储的数据,也有可能是网络请求的数据,这些数据默认是与 SwiftUI 没有依赖关系的

    10.2K20

    苹果全新UI框架来了!可视化编程,自动化减少20%代码量

    来源:Github等 编辑:鹏飞 本文转自公众号:新智元 【导读】SwiftUI是为Apple平台创建用户界面的现代化框架,以前所未有的速度创建漂亮、动态的应用程序。...这意味着编写代码时候,我们说出需要的东西,而不需要考虑如何实现 自动化:这意味着我们以前必须手工完成的许多事情,现在可以让SwiftUI自动完成 组合:构建小模块,然后通过将这些小的功能模块组合起来完成更复杂的任务...SwiftUI解决了哪些问题? 虽然Storyboards和XIB很有用,但并不是所有人都喜欢。...而SwiftUI通过4种方式,解决了上述问题: 用一个新的声明式UI结构,定义了的布局的外观和工作方式 更新UI预览会自动生成新的Swift代码,反之,更改Swift代码也会更新UI预览 Swift中的任何绑定例如有效的...感受一下SwiftUI的代码风格 ? Github一个repo整理了在WWDC 2019发布的SwiftUI布局框架的一些官方示例: SwiftUI Essentials 创建和组合视图: ?

    5.4K20

    Swift 周报 第十七期

    苹果称,正在与供应商密切合作,以恢复正常的生产水平,同时确保每个工人的健康和安全。 macOS Ventura 更高效,更尽兴,更跨界。 macOS Ventura 让各种日常操作都进化成神操作。...iCloud 共享照片图库会把家人们的美好回忆都集于一处,让每个家庭成员随时都能欣赏,即使不是自己拍摄或编辑的照片也能看到。...摘要: 在 iOS 16 中引入的 SwiftUI 图表,可以以直观的视觉格式呈现数据,并且可以使用 SwiftUI 图表快速创建。...在 iOS 16 中用 SwiftUI Charts 创建一个折线图 摘要: 苹果在 WWWDC 2022 上推出了 SwiftUI 图表,本文展示了如何用比以前从头开始创建同样的折线图少得多的代码轻松创建折线图...如何在 SwiftUI 中创建条形图 摘要: 本文将展示如何创建一个垂直条形图,其中矩形的高度将代表每个类别的值。

    2K10

    SwiftUI 状态管理系统指南

    然而,虽然建立一个将所有的状态都保存在其各种视图中的应用程序是肯定可行的,但从架构和关注点分离的角度来看,这通常不是一个好主意,而且很容易导致我们的视图变得相当庞大和复杂。...有了上面的类型,现在让我们回到ProfileView,让它观察新的UserModelController的实例,作为一个ObservedObject,而不是用一个State属性包装器来跟踪我们的用户模型...: SwiftUI视图不是对正在屏幕上渲染的实际UI组件的引用,而是描述我们的UI的轻量级值——因此它们没有像UIView实例那样的生命周期。...为了解决上述问题,苹果在iOS 14和macOS Big Sur中引入了一个新的属性包装器,名为StateObject。...标记为StateObject的属性与ObservedObject的行为完全相同——此外,SwiftUI将确保存储在此类属性中的任何对象不会因为框架在重新渲染视图时重新创建新实例而被意外释放: struct

    5.1K20

    SwiftUI 视图的生命周期研究

    •在生成新的视图值树时,即使已经有可以对应的实例(该实例并未销毁),SwiftUI 仍可能会创建一个新的实例。...这种情况可能是 SwiftUI 将第一个实例销毁后创建了一个新的实例,也可能是没有销毁第一个实例而直接创建了一个新的实例。...主要的理由有三条: •注册依赖的负担并不小。比如,@ObservableObject 在每次创建依赖的时候都需要重新进行堆分配,消耗很大,并可能有会有丢失数据的风险。...selection 在 1 和 2 之间切换时,SwiftUI 都会重新创建两个新的实例,并且将旧的实例销毁。...这在相当程度上改善了因多次创建实例而引发的效率问题。 让复杂的任务仅执行一次 但是,onAppear 或 task 也并非只会执行一次,如何保证让某些负担较重的任务只在页面中执行一次呢?

    4.5K30

    我庆幸果断放弃了SwiftUI:它还不够成熟

    新框架使用声明性范例,让开发者用更少的代码编写相同的 UI。 SwiftUI 的愿景是降低开发 iOS 门槛,吸引更多开发者、丰富 iOS 的业态。...他发表了一篇博客,总结了尝试并放弃 SwiftUI 的过程,这篇文章在 Hacker News 上引发了开发者们的大量讨论: “恕我直言,SwiftUI 是一个很好的机会,但苹果公司对它投资不足。...这是个宝贵的机会,能让我认真体验一把 SwiftUI 并探索其内部工作原理。 起初项目工作良好,我对 SwiftUI 的表现可以说非常满意,我甚至创建了自己的修改器,以便更轻松地显示警报消息。...跟其他创作工具一样,这款检查器的功能就是选定一个对象,并把可检查的对应属性显示在一个临时的用户界面元素当中。...首先,由可选对象提供的视图在每次重绘时都是在完全重新创建。我虽然通过缓存稍稍提升了性能表现,但实际体验仍然非常糟糕。事实证明,SwiftUI 检查器视图就是没法提供合理的重绘速度。

    5.1K20

    干货 | 关于SwiftUI,看这一篇就够了

    结构一直是前端布局的痛点,每次用户交互或者数据发生改变,都需要及时更新UI,否则会引起某些显示问题。...作为SwiftUI的新特点之一,FunctionBuilder倾向于目前流行的编程方式,开发者能够使用基于DSL的架构,像SwiftUI,而不用去考虑具体的实现细节,因为构建器实现的就是一个DSL本身。...Button,其父视图是一个ContenView,其实ContenView还会被一个RootView包含起来,RootView是SwiftUI在Window上创建出来了。...同时SwiftUI中也是支持frame设定,但也不会像UIKit中那样作用于当前元素,在内部也是形成一个虚拟的View来承载frame设定,在布局过程中进行frame计算最终显示出想要的结果。...总之在SwiftUI中给一个View设置属性,已经不是为当前元素提供约束,而是用一系列容器来包含当前元素,为后续布局计算做准备。

    10.5K11

    django 1.8 官方文档翻译: 1-2-4 编写你的第一个Django应用,第4部分

    当你创建一个表单为了修改服务器端的数据时,请使用 method=”post” 。这不是 Django 特定的技巧;这是优秀的 Web 开发实践。...在增加了投票选项的统计数后,代码返回一个 HttpResponseRedirect 对象而不是常见的 HttpResponse 对象。...通常情况下,当你编写一个 Django 应用时,你会评估下通用视图是否适合解决你的问题, 如果适合你就应该从一开始就使用它,而不是进行到一半才重构你的代码。...但是本教程直到现在都故意集中介绍“硬编码”视图,是为了专注于核心概念上。 就像你在使用计算器前需要知道基本的数学知识一样。...这两个视图分别用于显示两种抽象概念 “显示一系列对象的列表” 和 “显示一个特定类型的对象的详细信息页”。 每个视图都需要知道使用哪个模型数据。因此需要提供将要使用的 model 参数。

    1.5K10

    肘子的 Swift 周报 #009

    作为一个双语博客,我计划在首页添加一个简单的逻辑,根据访客的浏览器语言设置自动跳转到相应语言的页面。在测试过程中,我发现不同浏览器对系统语言列表的处理方式各不相同,这在前端开发中是一个常见的挑战。...原创 SwiftUI geometryGroup() 指南:从原理到实践[2] fatbobman(东坡肘子)[3] 在 WWDC 2023 中,苹果为 SwiftUI 添加了一个新的修饰器:geometryGroup...本文将介绍 geometryGroup() 的概念、用法,以及在低版本 SwiftUI 中,在不使用 geometryGroup() 的情况下如何处理异常。...在 Natalia 的 Using Observation framework outside of SwiftUI[6] 这篇文章的基础上,Matthaus Woolard 进一步探讨了将观察封装进...大多数健康应用都需要 HealthKit 框架的支持。Leonardo Pugliese 将通过详尽的代码介绍如何使用 SwiftUI 和 HealthKit 创建一个简单的步数计数器应用。

    14210
    领券