NSDocument-Based 应用程序:在 NSSavePanel 中选择默认文件类型
NSDocument-Based Application: Selecting Default File Type in NSSavePanel
我正在使用 NSDocument
class 制作一个简单的 document-based 应用程序。我的 info.plist 包含四个文档内容类型标识符,包括 public.text、public.plain-text、public.source-cde、public.rtf,如图所示多于。如果我调用 save-panel (NSSavePanel
),我会列出这些文件类型,如下所示。
我的问题是是否可以通过编程方式 select 其中一种文件类型。当保存面板出现时我可以select 'rich text (RTF)'吗?
以下是我的文档(NSDocument
)文件的一部分。
import Cocoa
class Document: NSDocument {
override init() {
super.init()
}
override class var autosavesInPlace: Bool {
return false
}
override func save(withDelegate delegate: Any?, didSave didSaveSelector: Selector?, contextInfo: UnsafeMutableRawPointer?) {
if let _ = fileURL {
Swift.print("Saved!!!")
} else {
Swift.print("Not saved yet...")
NSApp.sendAction(#selector(NSDocument.saveAs(_:)), to: nil, from: self)
}
}
override func writableTypes(for saveOperation: NSDocument.SaveOperationType) -> [String] {
return super.writableTypes(for: saveOperation)
}
override func prepareSavePanel(_ savePanel: NSSavePanel) -> Bool {
savePanel.allowsOtherFileTypes = true
savePanel.isExtensionHidden = false
guard let accessoryView = savePanel.accessoryView else { return true }
for sub in accessoryView.subviews {
Swift.print("Class: \(sub.className)")
/*
if sub.isKind(of: NSPopUpButton.self) {
if let popUpButton = sub as? NSPopUpButton {
popUpButton.selectItem(at: 5)
Swift.print("Sure")
}
}
*/
}
return true
}
}
我看到 this topic 是一个类似的标题,他使用 IKSaveOptions
,根据文档使用 'for saving image data'。我的应用程序处理文本。
谢谢。
默认文件格式为fileType
。在writableTypes(for:)
或runModalSavePanel(for:delegate:didSave:contextInfo:)
中设置fileType
。
override func writableTypes(for saveOperation: NSDocument.SaveOperationType) -> [String] {
fileType = "public.rtf"
return super.writableTypes(for: saveOperation)
}
我正在使用 NSDocument
class 制作一个简单的 document-based 应用程序。我的 info.plist 包含四个文档内容类型标识符,包括 public.text、public.plain-text、public.source-cde、public.rtf,如图所示多于。如果我调用 save-panel (NSSavePanel
),我会列出这些文件类型,如下所示。
我的问题是是否可以通过编程方式 select 其中一种文件类型。当保存面板出现时我可以select 'rich text (RTF)'吗?
以下是我的文档(NSDocument
)文件的一部分。
import Cocoa
class Document: NSDocument {
override init() {
super.init()
}
override class var autosavesInPlace: Bool {
return false
}
override func save(withDelegate delegate: Any?, didSave didSaveSelector: Selector?, contextInfo: UnsafeMutableRawPointer?) {
if let _ = fileURL {
Swift.print("Saved!!!")
} else {
Swift.print("Not saved yet...")
NSApp.sendAction(#selector(NSDocument.saveAs(_:)), to: nil, from: self)
}
}
override func writableTypes(for saveOperation: NSDocument.SaveOperationType) -> [String] {
return super.writableTypes(for: saveOperation)
}
override func prepareSavePanel(_ savePanel: NSSavePanel) -> Bool {
savePanel.allowsOtherFileTypes = true
savePanel.isExtensionHidden = false
guard let accessoryView = savePanel.accessoryView else { return true }
for sub in accessoryView.subviews {
Swift.print("Class: \(sub.className)")
/*
if sub.isKind(of: NSPopUpButton.self) {
if let popUpButton = sub as? NSPopUpButton {
popUpButton.selectItem(at: 5)
Swift.print("Sure")
}
}
*/
}
return true
}
}
我看到 this topic 是一个类似的标题,他使用 IKSaveOptions
,根据文档使用 'for saving image data'。我的应用程序处理文本。
谢谢。
默认文件格式为fileType
。在writableTypes(for:)
或runModalSavePanel(for:delegate:didSave:contextInfo:)
中设置fileType
。
override func writableTypes(for saveOperation: NSDocument.SaveOperationType) -> [String] {
fileType = "public.rtf"
return super.writableTypes(for: saveOperation)
}