忘れないようにメモ
個人的にアプリを作った際に調べたものをメモ.....φ(・∀・*)
スクロールビューの有効/無効を出来るようにする
class MyScrollView: NSScrollView {
/// スクロール有効/無効
var isScrollEnabled = true
/// scrollWheel
/// - Parameter event:
override func scrollWheel(with event: NSEvent) {
if self.isScrollEnabled {
super.scrollWheel(with: event)
}
}
}
ESCをショートカットキーで利用する場合
他のアクションに繋いでも動かなくて悩みました。ESCキーはデフォルトで下記アクションが利用されるようで、overrideする事により出来るようになりました。
@IBAction override func cancelOperation(_ sender: Any?) {
}
presentAsSheet で呼び出したViewのサイズ固定
class MyViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
// サイズを固定
self.preferredContentSize = self.view.frame.size
}
}
NSWindow のフルスクリーン判定
extension NSWindow {
// フルスクリーン判定
var isFullScreen: Bool {
return self.styleMask.contains(.fullScreen)
}
}
メニューの有効/無効
NSMenuItemValidationプロトコルの実装を使う。
extension ViewController: NSMenuItemValidation {
func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
switch (menuItem.action) {
// toggleSidebarメニューを条件によって有効/無効にする
case #selector(NSSplitViewController.toggleSidebar(_:)):
if self.hoge {
return false
} else {
return true
}
default:
return true
}
}
}
オブジェクトをファイルへ保存
// NSConfig プロトコルを実装
class Entity: NSObject, NSCoding {
var id: Int = 0
var name: String = ""
override init() {
super.init()
}
required init?(coder: NSCoder) {
self.id = coder.decodeInteger(forKey: "id")
self.name = coder.decodeObject(forKey: "name") as! String
}
func encode(with coder: NSCoder) {
coder.encode(self.id, forKey: "id")
coder.encode(self.name, forKey: "name")
}
}
// ファイルへ出力
var item: Entity(id: 1, name: "hoge")
NSKeyedArchiver.archiveRootObject(item, toFile: filePath)
// ファイルから読み込み
let readedItem = NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as? Entity
他にも、あとで追記予定。。。