2017-05-11 9 views
0

は、ビューの上に描かれたとき、それは与えられたNSRectStringを描画することtext: Stringarea: NSRectを、関連付けられた構造体Conceptを考えます。私は、クリック、にしたいと思いますNSTextFieldのコンテンツを設定描くNSRect

はNSRect私はtextField.frame = concept.areaを設定しようとした場合、セルは挿入図にレンダリングされる与えられたNSRect

に等しいNSTextFieldた「コンテンツ」(セル)を示して位置は、NSTextFieldのボーダー+パディングを考慮しているため、少し移動した別のNSRectにテキストをレンダリングします。

アイデアが

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)) 

ようなものになるだろうと期待される結果がどのように見えるはずですコードで:

enter image description here

どのように私はこれを達成することができます上の任意のアイデアを?

おかげ

+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を比較できます。描画矩形は境界から少しだけ挿入されます。特定の図面矩形を取得するためにフレームを計算するには、同じ量だけ目的の図面矩形から「派生」することで逆にします。

関連する問題