首页
学习
活动
专区
工具
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.2K62

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.2K20

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

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

589110

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

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

14.7K30

打造可适配多平台 SwiftUI 应用

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

3.1K80

打造可适配多平台 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 窗口同样是创建一个场景,

2K10

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

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

26720

SwiftUI-数据流

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

10K20

苹果全新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.3K20

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

5K20

SwiftUI 视图生命周期研究

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

4.3K30

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

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

4.9K20

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

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

5.8K10

肘子 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 创建一个简单步数计数器应用。

12110

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

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

1.4K10

SwiftUI创建自适应程序化导航方案

随着苹果对 iPadOS 不断投入,越来越多开发者希望自己应用能够 iPad 中有更好表现。...尤其当用户开启了台前调度( Stage Manager )功能后,应用对不同视觉大小模式兼容能力就越发显得重要。本文将就如何创建可自适应不同尺寸模式程序化导航方案这一内容进行探讨。...与 List 进行了深度绑定对于一个包含三列( A、B、C ) NavigationSplitView ,我们可以使用任意方式这些视图之间产生联动。...本着“一案一议”原则,当前方案可以实现对任意导航逻辑进行转换。总结可以 此处[5] 获取本文全部代码。一次编写便可对应多种设备,这本就是 SwiftUI 一个重要特点。...每周也会对当周博客新文章以及 Twitter 发布 Tips 进行汇总,并通过邮件列表形式发送给订阅者。订阅下方 邮件列表[8],可以及时获得每周 Tips 汇总。

4.2K30

玩转 Xcode Playground(

如何创建 Playground 项目 Xcode 中创建 Playground 项目 Xcode 中,点击 File -> New -> Playground 即可创建一个格式为.playground...尽量不要同时 macOS Xcode 和 iPad Swift Playgrounds 同时编辑一个项目,容易造成版本冲突。...如何创建多个 Playground Page Playground 鼓励开发者每次只关注一个议题,通过将议题分散到不同 Page 来帮助开发者组织代码和对应资源。...image-20211223151240337 如何查看结果栏 Playground Xcode 中拥有一个独有的显示区域——结果栏,该区域不仅可以显示每行代码的当前值、历史状态,同时也会显示关于调用次数...如何其他类型实例实时视图中显示 任何符合 PlaygroundLiveViewable 协议类型,都可以被设置为实时视图。

3.9K20

Swift 周报 第十九期

:用 ChatGPT 写 SwiftUI 话题讨论: 你如何看待各地疫情管控放开 新闻和社区 12 月 12 日,参与一周 Ask Apple 活动 欢迎继续参与一周激动人心 Ask Apple...Swift 高级类型系统,最近增加了 move-only types,提供了一个机会来创建一个能够在编译时防止整个类错误 Mach port 接口。...建议解决方案: 我建议我们自动将 macOS 生成最低支持版本添加到用户当前 macOS 版本中。...例如,不是生成这个 Package.swift 内容: let package = Package( name: "name", ... ) 目前 macOS 我们将生成以下内容:...它不但让我们参与到布局过程中,而且也给了我们一个很好机会去更好理解布局 SwiftUI作用。 话题讨论 你如何看待各地疫情管控放开 欢迎文末留言参与讨论。

1.5K30
领券