Cocoa
概要 Keynote Platforms State of the Union Xcode What’s New in Xcode 11 Getting Started with Xcode Adopting Swift Packages in Xcode Debugging in Xcode 11 Testing in Xcode Creating Great Localized Experiences with Xcode 11 Great Developer Ha…
アラートの表示 アラートを作る let alert = NSAlert() ダイアログとして表示 alert.runModal() 押されたボタンを確認 runModal()の戻り値で確認できます。 let response = alert.runModal() switch response { case .alertFirstButtonReturn: break case .a…
NSTextViewで折りたたみ(フォールディング)は、折りたたみたい文字のグリフをNullGlyphに置き換えることで実現できます。 下記に手順を紹介します。 折りたたむ文字列に目印をつける 折りたたみたい文字に目印となるカスタム属性を設定します。 ここではカス…
任意の文字列にリンクを設定 NSTextStorageにキーがNSAttributedString.Key.linkで値がURLの属性を設定すれば任意の文字列にリンクを設定できます。 textView.string = "Link to Blog" let url = URL(string: "https://tid-a24.hatenablog.com/")! textView.…
BehaviorでNSPopoverの閉じる方法(挙動)を指定します。 let popover = NSPopover() popover.behavior = .transient Behaviorは3種類定義されています。 applicationDefined 開発者が動作を定義する。(閉じるボタンをつけるなど。) 自動で閉じることはない。 …
環境設定のWindowをNSPanelにすることでEscapeキーで閉じるようにできます。 これだけでEscapeキー(または⌘-.)で閉じるようになります。
macOSの環境設定などで見かけるラベル:ユーザー入力可能なビューが規則的に並ぶレイアウトはNSGridViewを使うと楽に実装できます。 NSStackViewでも実装できないことはありませんが、 アラビア語などの右から左に読む言語へのローカライズが発生すると辛い…
環境:Xcode 8.3.3 / Swift 3.1 追記 デフォルトコンテナとカスタムコンテナが一致している場合はCKContainer.default()が使えて、 一致していない場合はコンテナ名を指定する必要がある、、、ということでした。 問題 macOS appでCloudKitを使う際、Capabil…
View basedなNSOutlineViewでダブルクリックされたセルを編集状態にする方法です。 NSOutlineViewを継承してfunc mouseDown(with event: NSEvent)を オーバーライドする必要があります。 class MyOutlineView: NSOutlineView { override func mouseDown(with…
Finderで表示されるフォルダーのアイコンなどを作る方法。 let folderIcon: NSImage = NSWorkspace.shared().icon(forFileType: NSFileTypeForHFSTypeCode(OSType(kGenericFolderIcon))) kGenericFolderIconを変更すれば色々なアイコンを取得できます。 元と…
画像のようなToolbarを持つアプリをFullScreenにした時に Toolbarを隠すにはNSWindowDelegateを設定します。 // NSWindowDelegateを設定 class WindowController: NSWindowController { override func windowDidLoad() { super.windowDidLoad() window?.dele…
コンテキストメニューでよくみかけるShow in Finderを実装する方法です。 let url: URL! = URL(string: fileOrDirectoryPath) NSWorkspace.shared().activateFileViewerSelecting([url]) ディレクトリを指定した場合はopenでも開けますが、 ファイルを指定し…