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.
45 lines
1.2 KiB
45 lines
1.2 KiB
6 years ago
|
// 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()
|
||
|
}
|
||
|
}
|