NSOutlineViewのNSTableCellViewを編集状態にする方法
View basedなNSOutlineViewでダブルクリックされたセルを編集状態にする方法です。
NSOutlineViewを継承してfunc mouseDown(with event: NSEvent)
を
オーバーライドする必要があります。
class MyOutlineView: NSOutlineView { override func mouseDown(with event: NSEvent) { super.mouseDown(with: event) guard event.clickCount >= 2 else { return } let point = convert(event.locationInWindow, from: nil) let selectedRow = row(at: point) guard selectedRow != NSOutlineViewDropOnItemIndex else { return } editColumn(0, row: selectedRow, with: nil, select: true) } }
func editColumn(_ column: Int, row: Int, with event: NSEvent?, select: Bool)
を
呼ぶことで編集状態になります。
このメソッドは指定されたセルが 編集可能(isEditable == true) なら編集状態にしてくれます。
システムアイコンのNSImageを作る方法
Finderで表示されるフォルダーのアイコンなどを作る方法。
let folderIcon: NSImage = NSWorkspace.shared().icon(forFileType: NSFileTypeForHFSTypeCode(OSType(kGenericFolderIcon)))
kGenericFolderIcon
を変更すれば色々なアイコンを取得できます。
元となるアイコンファイルは下記のパスにあります。
/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources
macOS app FullScreen時にToolbarを隠す
画像のようなToolbarを持つアプリをFullScreenにした時に
Toolbarを隠すにはNSWindowDelegate
を設定します。
// NSWindowDelegateを設定 class WindowController: NSWindowController { override func windowDidLoad() { super.windowDidLoad() window?.delegate = self } } extension WindowController: NSWindowDelegate { func window(_ window: NSWindow, willUseFullScreenPresentationOptions proposedOptions: NSApplicationPresentationOptions = []) -> NSApplicationPresentationOptions { return [ .fullScreen, .hideDock, .autoHideMenuBar, .autoHideToolbar ] } }
隠れたToolbarはマウスカーソルを画面上部に移動させると表示されます。
なお、NSApplicationPresentationOptions
の組合せには制限があります。
正しくない組合せを指定すると落ちることもあるので
上記以外の組合せを試す場合はドキュメントを参照してください。
参考
NSApplicationPresentationOptions - NSApplication | Apple Developer Documentation
指定したURLをFinderで開く
コンテキストメニューでよくみかけるShow in Finder
を実装する方法です。
let url: URL! = URL(string: fileOrDirectoryPath) NSWorkspace.shared().activateFileViewerSelecting([url])
ディレクトリを指定した場合はopen
でも開けますが、
ファイルを指定した場合は開けないか、関連付けされているアプリが開いてしまいます。
NSWorkspace.shared().open(url) // NG: Finderを開く用途では使えない
参考
activateFileViewerSelecting(_:) - NSWorkspace | Apple Developer Documentation