You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.2 KiB
44 lines
1.2 KiB
// Copyright © 2015 Abhishek Banthia |
|
|
|
import AppKit |
|
import Cocoa |
|
|
|
class TextViewWithPlaceholder: NSTextView { |
|
let placeholder = makePlaceHolder() |
|
|
|
override init(frame frameRect: NSRect) { |
|
super.init(frame: frameRect) |
|
} |
|
|
|
required init?(coder: NSCoder) { |
|
super.init(coder: coder) |
|
} |
|
|
|
class func makePlaceHolder() -> NSAttributedString { |
|
if let placeHolderFont = NSFont(name: "Avenir", size: 14) { |
|
let textDict = [ |
|
NSAttributedString.Key.foregroundColor: NSColor.gray, |
|
NSAttributedString.Key.font: placeHolderFont |
|
] |
|
return NSAttributedString(string: " Add your notes here.", attributes: textDict) |
|
} |
|
return NSAttributedString(string: " Add your notes here") |
|
} |
|
|
|
override func becomeFirstResponder() -> Bool { |
|
setNeedsDisplay(frame) |
|
return super.becomeFirstResponder() |
|
} |
|
|
|
override func draw(_ dirtyRect: NSRect) { |
|
super.draw(dirtyRect) |
|
if string == CLEmptyString, self != window?.firstResponder { |
|
placeholder.draw(at: NSPoint(x: 0, y: 0)) |
|
} |
|
} |
|
|
|
override func resignFirstResponder() -> Bool { |
|
setNeedsDisplay(frame) |
|
return super.resignFirstResponder() |
|
} |
|
}
|
|
|