2012-06-25 93 views
4

我使用NSTextField而不是NSTextView來接收用戶輸入,但我需要自定義字體和textColor和行間距。我使用下面的代碼,它可以用於字體和顏色,但我不知道如何設置行間距。NSTextField添加行間距

[self.titleField setTextColor:textColor]; 
[self.titleField setFont:bold14]; 

而且我也使用NSAttributedString來解決這個問題:

NSFont *bold14 = [NSFont boldSystemFontOfSize:14.0]; 
NSColor *textColor = [NSColor redColor]; 
NSMutableParagraphStyle *textParagraph = [[NSMutableParagraphStyle alloc] init]; 
[textParagraph setLineSpacing:10.0]; 

NSDictionary *attrDic = [NSDictionary dictionaryWithObjectsAndKeys:bold14, NSFontAttributeName, textColor, NSForegroundColorAttributeName, textParagraph, NSParagraphStyleAttributeName, nil]; 
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:title attributes:attrDic]; 
[self.titleField setAllowsEditingTextAttributes:YES]; 
[self.titleField setAttributedStringValue:attrString]; 

上面的代碼是OK顯示一個屬性串,但是當我刪除字符串中的文本框,並開始輸入,這些詞沒有任何屬性。

如何使用自定義字體,顏色和行間距輸入NSTextField中的字符串?

回答

4

最好使用NSTextField's屬性設置方法,而不是NSAttributedString,因爲它可以將設置發送到字段編輯器。每個文本字段都有一個NSTextView(大部分時間)「Field Editor」;而現場編輯器是在做什麼編輯。

您的NSAttributedString不會粘住,因爲您只是告訴文本字段暫時顯示該字符串。當字段編輯器彈出時,文本字段(單元格)傳遞其自身的屬性,如textField.fonttextField.textColor,但從未傳遞NSAttributedString的屬性。

最好使用NSTextView以便能夠使用-setDefaultParagraphStyle,因爲無論如何,無論如何您正在編輯多行代碼。如果你不能,因爲性能問題或其他事情,那麼:


子類NSTextFieldCell,因爲這是做所有的NSTextField工作,並覆蓋

- (NSText *)setUpFieldEditorAttributes:(NSText *)textObj 

(在NSCell聲明)至以您想要的方式爲您的字段編輯器設置屬性,因此您可以自己通過-setDefaultParagraphStyle(和字體等)將行高度值發送給它。 (textObj是要設置的字段編輯器)。

+0

謝謝你的回答,但我找不到NSText參考中的setDefaultParagraphStyle方法 –

+1

這是因爲儘管'setUpFieldEditorAttributes:'是'NSText'的返回類型,字段編輯器實際上是'NSTextView'。 – Monolo