在新窗口中打开视图的按钮Mac OS X的SwiftUI 5.3

鼠蝠

我想要一个按钮来打开新窗口并在Mac OS的SwiftUI中加载视图(用于应用程序的“首选项”),但是不确定这样做的正确方法。

我尝试创建一个函数并从可以执行的按钮操作中调用它,但是在关闭新窗口时,应用崩溃了:

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x20)

这是我的功能:

func openPreferencesWindow() {
    var preferencesWindow: NSWindow!
    let preferencesView = PreferencesView()
    // Create the preferences window and set content
    preferencesWindow = NSWindow(
        contentRect: NSRect(x: 20, y: 20, width: 480, height: 300),
        styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
        backing: .buffered,
        defer: false)
    preferencesWindow.center()
    preferencesWindow.setFrameAutosaveName("Preferences")
    preferencesWindow.contentView = NSHostingView(rootView: preferencesView)
    preferencesWindow.makeKeyAndOrderFront(nil)
}

这是我的按钮调用它:

Button(action: {
    openPreferencesWindow()
}) {
    Text("Preferences").font(.largeTitle).foregroundColor(.primary)
}

我觉得该窗口应该在AppDelegate中构造,但不确定如何调用它。

他的脾气

您需要保留对创建的首选项窗口(如主窗口)的引用。

这是可能的解决方案(已通过Xcode 11.4 / macOS 10.15.5测试)

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate {

    var window: NSWindow!
    var preferencesWindow: NSWindow!    // << here

    @objc func openPreferencesWindow() {
        if nil == preferencesWindow {      // create once !!
            let preferencesView = PreferencesView()
            // Create the preferences window and set content
            preferencesWindow = NSWindow(
                contentRect: NSRect(x: 20, y: 20, width: 480, height: 300),
                styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
                backing: .buffered,
                defer: false)
            preferencesWindow.center()
            preferencesWindow.setFrameAutosaveName("Preferences")
            preferencesWindow.isReleasedWhenClosed = false
            preferencesWindow.contentView = NSHostingView(rootView: preferencesView)
        }
        preferencesWindow.makeKeyAndOrderFront(nil)
    }

    // ... other code

现在按钮看起来像

Button(action: {
    NSApp.sendAction(#selector(AppDelegate.openPreferencesWindow), to: nil, from:nil)
}) {
    Text("Preferences").font(.largeTitle).foregroundColor(.primary)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Tkinter窗口专注于Mac OS X

来自分类Dev

列出Mac OS X和Python 3中的串行端口

来自分类Dev

Qt 5和OS X Mavericks问题

来自分类Dev

Xcode 5开发用于OS X 10.6

来自分类Dev

Google Maps API v3:在新窗口中打开标记上的链接

来自分类Dev

在Mac OS X 10.9中使用sqlite3

来自分类Dev

在Mac OS X 10.9.x上配置Django 1.7和Python 3

来自分类Dev

Mac OS上的Sublime Text 3无法保持项目打开

来自分类Dev

OS X是否支持3倍缩放?

来自分类Dev

如何在Mac OS X上安装ASP.NET 5 vNext?404 on mono--monolite

来自分类Dev

如何在不打开Mac OS X中任何终端窗口的情况下运行Python 3 tkinter应用程序?

来自分类Dev

如何在Google Map Api 3的InfoBox窗口中隐藏close(x)按钮?

来自分类Dev

Mac OS X上的ASP.NET MVC 5

来自分类Dev

由于没有EnvironmentObject的弹出窗口,SwiftUI Mac OS崩溃

来自分类Dev

单击主窗口中的按钮PyQt5 Python时打开的窗口

来自分类Dev

SDL创建窗口未在Mac OS X上创建窗口

来自分类Dev

SwiftUI App中新窗口中缺少窗口控制按钮

来自分类Dev

生成新的终端窗口(Mac OS X)?

来自分类Dev

Google Maps API v3:在新窗口中打开标记上的链接

来自分类Dev

C ++中的基本加密功能(Mac OS X Mavericks,XCode 5)

来自分类Dev

在还原的OS X终端窗口中加载rvm环境

来自分类Dev

Tkinter-我如何在新窗口中创建按钮,该窗口是由调用函数创建的?的Python 3

来自分类Dev

如何在指定的目标位置搜索文件,并将其全部显示在Mac OS X的一个Finder窗口中?

来自分类Dev

Rails 3 Wicked-pdf从表单提交在新窗口中打开pdf

来自分类Dev

是否可以在Mac OS X中更改已经打开的窗口的透明度?

来自分类Dev

Mac OS X使用带有视图控制器的自动布局,并允许调整窗口大小

来自分类Dev

在Mac OS X的终端窗口中查看SD卡的内容

来自分类Dev

Laravel 5 Project 上的 Mac OS X 上的 npm install hang

来自分类Dev

MVC 5 在新窗口中打开视图

Related 相关文章

  1. 1

    Tkinter窗口专注于Mac OS X

  2. 2

    列出Mac OS X和Python 3中的串行端口

  3. 3

    Qt 5和OS X Mavericks问题

  4. 4

    Xcode 5开发用于OS X 10.6

  5. 5

    Google Maps API v3:在新窗口中打开标记上的链接

  6. 6

    在Mac OS X 10.9中使用sqlite3

  7. 7

    在Mac OS X 10.9.x上配置Django 1.7和Python 3

  8. 8

    Mac OS上的Sublime Text 3无法保持项目打开

  9. 9

    OS X是否支持3倍缩放?

  10. 10

    如何在Mac OS X上安装ASP.NET 5 vNext?404 on mono--monolite

  11. 11

    如何在不打开Mac OS X中任何终端窗口的情况下运行Python 3 tkinter应用程序?

  12. 12

    如何在Google Map Api 3的InfoBox窗口中隐藏close(x)按钮?

  13. 13

    Mac OS X上的ASP.NET MVC 5

  14. 14

    由于没有EnvironmentObject的弹出窗口,SwiftUI Mac OS崩溃

  15. 15

    单击主窗口中的按钮PyQt5 Python时打开的窗口

  16. 16

    SDL创建窗口未在Mac OS X上创建窗口

  17. 17

    SwiftUI App中新窗口中缺少窗口控制按钮

  18. 18

    生成新的终端窗口(Mac OS X)?

  19. 19

    Google Maps API v3:在新窗口中打开标记上的链接

  20. 20

    C ++中的基本加密功能(Mac OS X Mavericks,XCode 5)

  21. 21

    在还原的OS X终端窗口中加载rvm环境

  22. 22

    Tkinter-我如何在新窗口中创建按钮,该窗口是由调用函数创建的?的Python 3

  23. 23

    如何在指定的目标位置搜索文件,并将其全部显示在Mac OS X的一个Finder窗口中?

  24. 24

    Rails 3 Wicked-pdf从表单提交在新窗口中打开pdf

  25. 25

    是否可以在Mac OS X中更改已经打开的窗口的透明度?

  26. 26

    Mac OS X使用带有视图控制器的自动布局,并允许调整窗口大小

  27. 27

    在Mac OS X的终端窗口中查看SD卡的内容

  28. 28

    Laravel 5 Project 上的 Mac OS X 上的 npm install hang

  29. 29

    MVC 5 在新窗口中打开视图

热门标签

归档