Как нарисовать границу вокруг NSTextView - PullRequest
0 голосов
/ 03 апреля 2020

Я просто пытаюсь нарисовать черную границу в одну точку вокруг NSTextView и столкнулся с проблемой. Код ниже является подклассом NSTextView:

override init(frame: NSRect, textContainer: NSTextContainer?)
{
    super.init(frame:frame, textContainer: textContainer)

    self.wantsLayer = true
    self.layer?.borderColor = NSColor.black.cgColor
    self.layer?.borderWidth = 1.0
    self.layer?.cornerRadius = 0.0
}

Код self.wantsLayer = true приводит к исчезновению NSTextView. Есть ли другой способ выполнить sh это?

РЕДАКТИРОВАТЬ: Вот как я добавляю NSTextView aka PageView к его родителю view:

    let textContainer = NSTextContainer()
    textContainer.widthTracksTextView = true
    textContainer.heightTracksTextView = true

    let pageView = PageView(frame: CGRect(x: 0, y: pagesViewOriginY, width: self.paperSize.width, height: self.paperSize.height), textContainer: textContainer)
    self.addSubview(pageView);

    self.layoutManager.addTextContainer(textContainer);

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Другой альтернативой является создание отдельного класса для текстового представления и использование draw () для предоставления фрейма:

class TextView: NSTextView {
override func draw(_ rect: NSRect) {
  super.draw(rect)
  let border:NSBezierPath = NSBezierPath(rect: bounds)
  let borderColor = NSColor.black
  borderColor.set()
  border.lineWidth = 2.0
  border.stroke()
}
}
1 голос
/ 05 апреля 2020

Можно ли использовать вид прокрутки и установить границу следующим образом:

scrollView.borderType = .lineBorder

В качестве альтернативы, вы можете встроить текстовое представление в NSView и нарисовать границу вокруг него:

let embedderRect = NSMakeRect(10, 590, _wndW - 20, 252)
let embedderView = NSView(frame:embedderRect)
let textStorage = NSTextStorage()
let layoutManager = NSLayoutManager()
textStorage.addLayoutManager(layoutManager)
let textContainer = NSTextContainer()
layoutManager.addTextContainer(textContainer)
let textView = NSTextView(frame:NSMakeRect( 1, 1, embedderRect.size.width - 2, embedderRect.size.height - 2 ), textContainer: textContainer)
embedderView.wantsLayer = true
embedderView.layer?.borderColor = NSColor.black.cgColor
embedderView.layer?.borderWidth = 1.0
embedderView.layer?.cornerRadius = 0.0
embedderView.addSubview (textView)
window.contentView!.addSubview (embedderView)
...