首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSavePanel缺少"shouldRunSavePanelWithAccessoryView“键吗?

NSSavePanel缺少"shouldRunSavePanelWithAccessoryView“键吗?
EN

Stack Overflow用户
提问于 2021-02-11 17:27:27
回答 1查看 191关注 0票数 0

我有下面的代码,它在我的SwiftUI macOS应用程序中显示了一个保存面板。

它需要能够显示文件格式选择器,该选择器在标准附件视图中可用。

然而,启用此视图的关键似乎丢失了(类型为“NSSavePanel”的值没有成员“shouldRunSavePanelWithAccessoryView”),并且我找不到任何关于何时删除此视图的引用,也找不到任何替代方法。

有没有聪明人知道怎么回事?

代码:

代码语言:javascript
复制
private func saveToFile() {
    appState.triggerViewUpdate.toggle()
    
    let panel = NSSavePanel()
    
    panel.nameFieldLabel = "Save adjusted image as:"
    panel.nameFieldStringValue = "adjustedimage.png"
    panel.canCreateDirectories = true
    panel.showsTagField = false
    panel.isExtensionHidden = false

    
    // this generates error "Value of type 'NSSavePanel' has no member 'shouldRunSavePanelWithAccessoryView'"
    panel.shouldRunSavePanelWithAccessoryView = true
    //
    
    
    if #available(OSX 11.0, *) {
        let allowedContentTypes = [UTType.png, UTType.jpeg]
        panel.allowedContentTypes = allowedContentTypes
    } else {
        let allowedFileTypes = [".png", ".jpeg"]
        panel.allowedFileTypes = allowedFileTypes // not sure if we need this
    }
    
    panel.begin { response in
        if response == NSApplication.ModalResponse.OK, let savePath = panel.url {
            if debug { print("savePath: \(savePath)") }

            let ciImage = applyFilters(textureIn: appState.imageTexture!)
            let cgImage = ciImage.asCGImage()
                            
            let nsImage = NSImage(cgImage: cgImage!, size: ciImage.extent.size)
            if nsImage.pngWrite(to: savePath) {
                print("File saved")
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-02-13 10:45:28

我设法用IKSaveOptions解决了这个问题

代码语言:javascript
复制
    let panel = NSSavePanel()
    let options = IKSaveOptions(imageProperties: [:],
                                imageUTType: kUTTypeImage as String)!
    options.addAccessoryView(to: panel)

    panel.begin { response in
         if response == .OK, let savePath = panel.url {
            //...
         }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66151966

复制
相关文章

相似问题

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