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

从AppKit NSButton打开新的SwiftUI窗口

是一种在 macOS 平台上实现界面转换的方法。NSButton是一种 AppKit 框架中的按钮控件,SwiftUI是一个跨平台的用户界面框架,能够使用简单的语法创建各种界面元素。

当用户点击 NSButton 控件时,我们可以通过编程的方式在响应函数中创建并显示一个新的 SwiftUI 窗口。这样可以实现在用户交互下打开新的窗口来呈现不同的界面。

为了实现这一功能,可以按照以下步骤进行操作:

  1. 创建一个 NSButton 控件并将其添加到你的 AppKit 应用程序的界面中。
  2. 在响应函数中,监听 NSButton 的点击事件。
  3. 在点击事件的处理函数中,创建一个 SwiftUI 窗口对象。
  4. 将需要显示的 SwiftUI 视图放入该窗口中。
  5. 显示该窗口。

以下是一个示例代码:

代码语言:txt
复制
import Cocoa
import SwiftUI

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    
    var window: NSWindow!
    
    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // 创建主窗口
        window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
                          styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
                          backing: .buffered, defer: false)
        window.center()
        window.setFrameAutosaveName("Main Window")
        
        // 创建一个按钮
        let button = NSButton(frame: NSRect(x: 20, y: 20, width: 100, height: 30))
        button.title = "打开窗口"
        button.bezelStyle = .rounded
        button.target = self
        button.action = #selector(openSwiftUIWindow)
        
        // 添加按钮到主窗口的内容视图
        window.contentView?.addSubview(button)
        
        // 显示主窗口
        window.makeKeyAndOrderFront(nil)
    }
    
    @objc func openSwiftUIWindow() {
        // 创建一个 SwiftUI 窗口
        let swiftUIWindow = NSWindow(
            contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
            styleMask: [.titled, .closable, .miniaturizable, .resizable],
            backing: .buffered, defer: false)
        
        // 创建一个 SwiftUI 视图
        let swiftUIView = ContentView()
        
        // 将 SwiftUI 视图设置为窗口的根视图
        swiftUIWindow.contentView = NSHostingView(rootView: swiftUIView)
        
        // 显示 SwiftUI 窗口
        swiftUIWindow.makeKeyAndOrderFront(nil)
    }
}

struct ContentView: View {
    var body: some View {
        Text("Hello SwiftUI Window!")
            .font(.title)
            .padding()
    }
}

在上面的例子中,我们创建了一个 NSButton,并将其添加到了主窗口的内容视图中。当用户点击按钮时,调用了 openSwiftUIWindow() 方法,该方法创建了一个新的 SwiftUI 窗口并在其中展示了一个简单的文本视图。

此外,除了 AppKit 和 SwiftUI,还可以使用其他工具和框架来实现类似的功能,比如使用 Cocoa Touch 等技术栈进行 iOS 应用开发中的界面转换。具体选择何种技术栈取决于项目需求和开发团队的喜好。

腾讯云提供了多种云计算产品和服务,包括云服务器、对象存储、数据库、人工智能等。如果需要在云环境下进行应用部署和管理,可以参考腾讯云的产品文档和示例代码来进行开发和部署。

腾讯云产品链接:腾讯云产品

希望这个回答对你有所帮助!

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

相关·内容

macOS AppKit 事件响应简介

NSApplication 一个重要任务就是macOS系统窗口服务中接收事件(Event),然后将它们派发到相应NSResponsder对象....NSApplication同时会响应(或派发)接收到Apple Event(这个比较重要),比如应用启动或者被再次打开(reopened),这个最常用一个使用场景是通过URL打开我们App(处理方式与...每个应用都有一种明确机制用来确保操作系统窗口服务中获取事件(Event).在Cocoa Application中,这种机制叫做runloop(一个NSRunLoop对象,它允许进程接收窗口服务各种来源...直到有事件到来才会继续....key Window窗口一个(NSButton)按钮时,这个点击动作仅仅是将这个窗口(NSWindow)对象变成key Window而已,你还需要使用鼠标再次点击这个按钮,此时这个按钮才会接收到鼠标点击事件

2.7K60

肘子 Swift 周报 #009

虽然这一变化暂时只针对中国市场,但鉴于华为在该市场影响力,许多大公司不会轻易放弃这部分用户。这也意味着,国内互联网公司开始积极适配 HarmonyOS,为原生移动开发就业领域带来机遇。...其实,无论是前端还是移动应用开发,技术演进和市场变化都在不断推动开发者去学习新技能和适应环境。尽管面临挑战,但这也为开发者提供了成长和创新机会。...原创 SwiftUI geometryGroup() 指南:原理到实践[2] fatbobman(东坡肘子)[3] 在 WWDC 2023 中,苹果为 SwiftUI 添加了一个修饰器:geometryGroup...Kyle Ye 发现 Link 在 watchOS 上无法直接打开链接问题入手,深入研究了 Link 组件内部实现,最终找到了一种无需通过 ASWebAuthenticationSession 新解决方案...有多少应用使用了 Mac Catalyst 和 SwiftUI,相比之下又有多少是使用 AppKit

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

    框架使用声明性范例,让开发者用更少代码编写相同 UI。 SwiftUI 愿景是降低开发 iOS 门槛,吸引更多开发者、丰富 iOS 业态。...考虑到配套创作工具 CiderKit 在发展成熟过程中也变得愈发复杂,再加上创建各种窗口和 UI 元素实际需求,我决定尝试用用 SwiftUI。...利用这款工具,我可以用多个 sprite 拼接成复杂资产,再最终为它们制作动画。它显示效果就是主窗口一张表,出于学习目的,我当然还是想继续用 SwiftUI 喽。...但上图展示效果其实是在 AppKit 中完成,因为我在 SwiftUI 一直实现不了预期功能。大家应该注意到了,中间 SpriteKit 视图上有三个按钮(分别是 +、200% 和 -)。...这可以说是压死骆驼最后一根稻草了,我决定放弃 SwiftUI,继续用 AppKit。 总    结 其实没能在项目中用到 SwiftUI,会让我感觉有点遗憾。

    5K20

    AttributedString——不仅仅让文字更漂亮

    : •将UIKit或AppKit控件包装成SwiftUI控件,在其中显示NSAttributedString•通过代码将NSAttributedString转换成对应SwiftUI布局代码•使用SwiftUI...API同AttributedString配合范例,请参阅WWDC 2021Formatter API:新老比较及如何自定义[1] SwiftUI集成 SwiftUIText组件提供了对AttributedString...AttributedString同时提供了SwiftUI、UIKit、AppKit三种框架可用属性。UIKit或AppKit控件同样可以渲染AttributedString(需经过转换)。...目前支持属性明显少于uiKit和appKit。估计待日后SwiftUI提供更多显示支持后会逐步补上其他暂不支持属性。•uiKit可以在UIKit下被渲染属性。...为了方便自定义属性集被用于需要指定Scope场合,在自定义Scope中推荐嵌套入需要系统框架Scope(swiftUI、uiKit、appKit)。

    3.9K40

    肘子 Swift 周报 #036 | WWDC 2024 观后感

    SwiftUI 初次接触 SwiftUI 今年特性时,我并未感到特别兴奋。然而,做了更多研究后,我意识到此次更新在 SwiftUI 发展史上将具有十分重要意义。...随着 SwiftUI 与 UIKit 框架之间动画、转场和手势等机制共享,SwiftUI 正逐渐仅基于 UIKit/AppKit 框架,转变为与苹果生态中其他 UI 框架更平等合作伙伴。...它不再仅是汲取其他框架功能,而是开始具备了反哺其他框架特性能力。 新版本 SwiftUI 框架还在代码层面进行了分层处理,单独划分出了 SwiftUICore 框架。...这可能主要是为了更好地与 UIKit 和 AppKit 平等合作,但这也给了我对其它可能性充分遐想空间。...因此,WWDC 不只是观察未来趋势窗口,它同样是一个促进交流、推动进步和自我提升重要平台。

    12110

    肘子 Swift 周报 | Swift,超越苹果生态!

    此外,通过引入语言特性及支持这些特性第三方库,Swift 在服务器端表现也得到了进一步加强。...为了便于阅读,我对原始内容进行了简化,并调整为更加书面化表达。本次分享核心是传达这样一个中心思想:尽管这些框架是为了解决现有框架中问题而设计,但我们不应被过往经验和惯例所限制。...需要用开放心态和全新视角去学习和使用这些新工具。将采用框架过程视为将项目向更安全、更现代化方向重构绝佳机会。...在转向 AppKit 过程中,他探讨了一些鲜为人知 AppKit 组件,如 NSTableHeaderCell 等,并通过 NSViewRepresentable构建了 SwiftUIAppKit...文章中,作者强调他目的并非是要比较 SwiftUIAppKit 性能优劣,或者质疑 SwiftUI 在 macOS 上应用适用性。

    13910

    SwiftUI中使用UIKit视图

    在相当长时间中开发者仍需在SwiftUI中依赖UIKit(AppKit)代码。好在,SwiftUI为开发者提供了便捷方式将UIKit(AppKit)视图(或控制器)包装成SwiftUI视图。...如果你已经对如何使用UIViewRepresentable有所掌握,可以直接SwiftUI风格化部分阅读 基础 在具体演示包装代码之前,我们先介绍一些与在SwiftUI中使用UIKit视图有关基础知识...生命周期 SwiftUI同UIKit和AppKit主要区别之一是,SwiftUI视图(View)是值类型,并不是对屏幕上绘制内容具体引用。...在绘制屏幕时,会视图树顶端开始对视图body求值,如果其中还包含子视图则将递归求值,直到获得最终结果。...Introspect通过自省方法来尝试查找原生控件背后包装UIKit(或AppKit)组件。目前官方尚未在SwiftUI中开放功能多数可以通过此扩展库提供方法来解决。

    8.2K22

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

    来源:Github等 编辑:鹏飞 本文转自公众号:智元 【导读】SwiftUI是为Apple平台创建用户界面的现代化框架,以前所未有的速度创建漂亮、动态应用程序。...一致性:这意味着Swift和Objective-C之间不会再看到奇怪错误,或者非常旧API与API混合 简洁:可以节省10%-20%代码量 如果你刚刚接触SwiftUI,刚开始你可能需要适应一下...而SwiftUI通过4种方式,解决了上述问题: 用一个声明式UI结构,定义了布局外观和工作方式 更新UI预览会自动生成Swift代码,反之,更改Swift代码也会更新UI预览 Swift中任何绑定例如有效...outlets和操作,都会在编译时进行检查,因此在运行时不会出现UI失败风险 虽然背后使用来自UIKit和AppKit控件,但SwiftUI凌驾于二者之上,能够有效地使底层UI框架成为一个实现细节,...让Xcode for iPad更上一层楼 开发者对Interface Builder抱怨不是一天两天了,它大大增加了分解视图块以及视图控制器(view controller)使用视图工作量,导致出现体积臃肿视图控制器

    5.4K20

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

    本文将解析 SwiftUI 中两个由于未能贯彻响应式编程原则而导致严重错误,并提供相应解决方案。...这些控件基本上都是对 UIkit(AppKit二次包装。Sheet执行下面的代码,你可以清楚地看到,在通过手势取消 Sheet 时,与其关联状态是在 Sheet 完成取消动画后才发生了改变。...只有直接修改 path,SwiftUI 才能表现像一个真正响应式编程框架。...幸运是,我 @KyleSwifter 解密 SwiftUI 背后 AttributeGraph 一文中找到了线索。...随着版本提高,SwiftUI 功能也确实得到了相当程度增加。不过,即使在最新版本中,在一些对 UIKit(AppKit)进行二次包装控件中,仍有不少细节处理不到位问题。

    695110

    WWDC - SwiftUI - 初恋般感觉

    你可以通过Xcode实时反馈功能,来优化你视图布局 。 第一节 创建一个使用SwiftUIXcode项目。浏览画布、预览和SwiftUI模板代码。...Modifiers可以修改视图属性,并且modifier返回一个视图,所以通常会将多个modifiers像链一样垂直堆叠在一起。( 链式编程)。...第七步 在location后面添加一个文本框,修改文本框文案并设置字体 import SwiftUI struct ContentView: View { var body: some View...第二步 选择File > New > File打开模版选择面板。在 User Interface区域,选择 SwiftUI View->Next ,命名为CircleImage.swift。...SwiftUI在WatchKit和AppKit同样声明了类似的协议 ? 第一步 创建SwiftUI View来展示MKMapView。

    3.8K10

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

    本文将解析 SwiftUI 中两个由于未能贯彻响应式编程原则而导致严重错误,并提供相应解决方案。...视图变化在前、状态变化在后 在 SwiftUI 中,某些可编程控件在执行一定操作时,会先更新视图,待视图变化完成后再修改与其对应状态。这些控件基本上都是对 UIkit(AppKit二次包装。...只有直接修改 path,SwiftUI 才能表现像一个真正响应式编程框架。...幸运是,我 @KyleSwifter[4] 解密 SwiftUI 背后 AttributeGraph[5] 一文中找到了线索。...随着版本提高,SwiftUI 功能也确实得到了相当程度增加。不过,即使在最新版本中,在一些对 UIKit(AppKit)进行二次包装控件中,仍有不少细节处理不到位问题。

    32720

    如何在 SwiftUI 中熟练使用 sensoryFeedback 修饰符

    前言SwiftUI 引入了 sensoryFeedback 视图修饰符,使我们能够在所有 Apple 平台上播放触觉反馈。...背景介绍在 iOS 17 之前,如果你想要从 SwiftUI 视图中向用户提供触觉反馈,你会使用其中一个 UIKit(或 AppKit反馈生成器。...你可以根据需要进行进一步调整和扩展。总结SwiftUI引入了sensoryFeedback视图修饰符,为所有Apple平台提供触觉反馈。...对于触发器值处理也非常灵活,可以根据其条件选择不同反馈样式。总体而言,这个视图修饰符为提高应用可访问性和用户体验提供了简便方式。在使用时需谨慎,避免过多干扰用户。...希望通过学习这个特性,开发者能更好地运用触觉反馈功能,提升应用交互性。

    12921

    Swift 中热重载

    许多年前,我使用 DyCI[1] 切换到 InjectionForXcode,通过利用 LLVM 互操作而不是任何 swizzling ,它效果更好。...Inject 这个小型库是完全通用,无论您使用 UIKit、 AppKit 还是 SwiftUI,您都可以使用它。 您无需为生产应用程序添加条件或删除 Inject 代码。...工作流 SwiftUI 只需要两行字就可以使任何 SwiftUI 启用实时编程,而当您这样做时,您将拥有比使用 Swift Previews 更快工作流程,同时能够使用实际生产数据。...这是如何运作呢? Hosts 利用了自动闭包,因此每次您注入代码时,我们都会使用与最初相同参数创建您类型实例,从而允许您迭代任何代码、内存布局和其他所有内容。...像 MVVM / MVC 这样标准架构可以获得免费逻辑注入,重新编译你类,当方法重新执行时,你已经在使用代码了。

    2K20

    SwiftUI 视图生命周期研究

    SwiftUI 视图生命周期研究 访问我博客 www.fatbobman.com[1] ,获得更好阅读体验 在 UIKit(AppKit世界中,通过框架提供大量钩子(例如 viewDidLoad...在进行更详尽说明之前,请大家先明确两个观点: •SwiftUI 没有同 UIkit(AppKit)对应视图与视图生命周期•应避免对 SwiftUI 视图创建、body 调用、布局与渲染等时机和频率进行假设...•在生成视图值树时,即使已经有可以对应实例(该实例并未销毁),SwiftUI 仍可能会创建一个实例。...但 SwiftUI 并非一定会从新实例中获取 body 结果,如果之前实例注册过数据依赖,视图值树仍可能会原来实例 body 中获取结果。...这种情况可能是 SwiftUI 将第一个实例销毁后创建了一个实例,也可能是没有销毁第一个实例而直接创建了一个实例。

    4.4K30

    【visionOS】从零开始创建第一个visionOS程序

    这样才可以在使用SwiftUI创建应用,充分利用visionOS中提供沉浸感。...将你应用扩展到沉浸式空间 熟悉基于窗口体验开始,向人们介绍您内容。从那里,添加特定于visionOSSwiftUI场景类型,如卷和空间。...当创建一个visionOS应用程序时,你可以配置对话框中配置应用程序初始场景类型。要在初始场景中主要显示2D内容,请选择Window作为初始场景类型。对于主要3D内容,选择一个Volume。...使用这个项目文件原始形状和现有的USDZ资产构建内容。你也可以用它来为你内容构建和测试自定义RealityKit动画和行为。 修改现有的窗口页面链接 使用标准SwiftUI视图构建初始接口。...要显示您ImmersiveSpace场景,请使用openImmersiveSpace操作打开它,该操作SwiftUI环境中获得。此操作异步运行,并使用提供信息来查找和初始化场景。

    90140

    Xcode 11 初体验

    其中说明一下:SwiftUI 预览 系统最低要求macOS 10.15 Add Editor 提供了编辑窗口任意切割功能 可以指定文件打开位置。...使用 Focus Mode 专注使用某一个窗口。 综合这个功能还是不错,我经常也会打开多个页面!来回进去出来麻烦! 直接点击这个按钮,会横向进行分割。...指定文件打开位置 上面我们介绍了窗口分割,在 Xcode 11 中,你还可以按住 Option + Shift,然后在左边点击要打开文件,这时会出现窗口选择提示 你可以用键盘,或者鼠标任意方式选择你要打开这个文件窗口...,选中后点击鼠标左键或者键盘Enter 键,就可以在指定窗口打开这个文件了。...除此之外你还可以移动鼠标到两个窗口之间,将要打开文件在这里插入一个窗口: 综合这个功能,更加方便我们对比阅读,快速开发!

    3.2K10
    领券