2014-08-31 2 views
0

Попытка научить себя, как делать пользовательский чертеж в OS X. Я пытаюсь вложить NSTextView в NSView.Appkit/Quartz/CG Вложение NSTextView в пределах настраиваемого представления правильно

Got top, want bottom

Я не могу показаться, чтобы выяснить, шаг я отсутствующий, чтобы получить NSTextView вести себя так, как будто он не был встроен в другой настраиваемое представление (Т.е., текст должен начинаться redering от верхнего левого в рамке, предоставленной NSTextView, слева направо и сверху вниз).

import Cocoa 
import AppKit 
import XCPlayground 

class MyView : NSView { 
    let lipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 

    override init(frame: NSRect) { 
     super.init(frame:frame) 
     self.wantsLayer = true 
    } 

    required init(coder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func drawRect(dirtyRect: NSRect) { 
     super.drawRect(dirtyRect) 

     let grey = NSColor.grayColor() 
     self.layer?.backgroundColor = grey.CGColor 

     let boundaryRect = NSInsetRect(dirtyRect, 10, 10) 
     let textRect = NSInsetRect(boundaryRect, 10, 10) 

     let path = NSBezierPath(roundedRect: boundaryRect, xRadius: 5, yRadius: 5) 
     path.stroke() 


     let text = NSTextView(frame: textRect) 

     text.backgroundColor = grey 
     text.insertText(lipsum) 

     text.drawRect(textRect) 
    } 
} 

var frame = NSRect(x: 0, y: 0, width: 400, height: 400) 

let myView = MyView(frame: frame) 

let textView = NSTextView(frame:frame) 
textView.insertText(myView.lipsum) 

XCPShowView("my view", myView) 
XCPShowView("text view", textView) 

ответ

1

На самом деле вы не разместили вид text внутри родительского вида. Вы можете сделать это с помощью addSubview().

let text = NSTextView(frame: textRect) 

    text.backgroundColor = grey 
    text.insertText(lipsum) 

    self.addSubview(text) // <--------- 
} 
+0

Да, это сделало. Как просто. Уууууууу имеет свои недостатки;). Теперь мне даже не нужно называть ничью на ребенка. –

+0

Учимся, самый запоминающийся способ узнать! – chuckus