2017-05-11 3 views
0

뷰에 그릴 때, 그것은 주어진 NSRect에서 String을 그릴 것 text: Stringarea: NSRect를, 관련 않은 구조체 Concept을 감안할 때.NSTextField있는 콘텐츠를 설정 그리기 NSRect

클릭에 내가 textField.frame = concept.area을 설정하려고하면 "내용"(셀) NSRect 지정된 NSRect

와 동일한 NSTextField을 보여주기 위해 내가 좋아하는 것, 세포가 삽입 된 렌더링됩니다 위치를 테두리 + 패딩을 고려하여 NSTextField, 그래서, 약간 다른, NSRect 이동 텍스트를 렌더링합니다. 나는 이것을 달성 할 수있는 방법에

enter image description here

아이디어 :

코드에서 아이디어는

struct Concept { 
    let text: String 
    let area: NSRect 

    func draw() { 
    text.draw(inRect: area) 
    } 
} 

let conceptRect = NSRect(x: 50, y: 60, width: 80, height: 20) 
let concept = Concept(text: "sample text", area: conceptRect) 

let textField = NSTextField() 
textField.stringValue = concept.text 

textField.???? = area 
let textFieldRect = textField.frame 

assert(textFieldRect != conceptRect) 
assert(textFieldRect.contains(conceptRect)) 

그리고 예상되는 결과 같은 모양을해야 할 것인가?

감사

+1

NSTextField를 항상 사용하지 않고 클릭 할 때만 편집 가능/테두리를 변경하지 않는 이유는 무엇입니까? – catlan

+0

나는 여러 가지 텍스트 필드를 필요로하지 않는 리소스 측면에서 이러한 종류의보기를 구현하는 다양한 접근 방식을 실험하고 있습니다. 항상 1이 활성화 될 것이고 그 이상이 아니기 때문에 나는 단지 위치에있는 일반적인 텍스트 필드를 사용하기로 결정했습니다. 나는 어디에 내 콘텐츠를 그립니다. – fespinozacast

+0

[Sketch Sample Code] (https://developer.apple.com/library/content/samplecode/Sketch/Introduction/Intro.html)를보십시오. – Willeke

답변

0

당신은 당신이 그리는 정확한 위치에 영향을 미칠 수있는 area 문자열을 드로잉하고 어떻게 말을하지 않습니다. 텍스트 필드의 경계 패딩이 무엇인지 파악하려면

, 당신은 비교할 수는 celldrawingRect(forBounds:) 텍스트 필드의 bounds와. 드로잉 rect는 경계에서 조금씩 삽입됩니다. 특정 드로잉 rect를 얻기 위해 프레임을 계산하려면 원하는 드로잉 rect에서 같은 양만큼 "outsetting"하여이를 역전시킵니다.