如何创建多行的NSTextField?更新:我在IB中发现了一种特殊类型的NSTextField,称为“Wrapped Text Field”。它是多行的,但当我想要换行时,我必须按Ctrl+Enter。但我只想按Enter键换行。我该怎么做?
如何创建多行的NSTextField?更新:我在IB中发现了一种特殊类型的NSTextField,称为“Wrapped Text Field”。它是多行的,但当我想要换行时,我必须按Ctrl+Enter。但我只想按Enter键换行。我该怎么做?
在Interface Builder中无法单独指定此行为。您可以通过代理消息来完成,如此技术说明书QA1454所述。
这是技术说明书中的示例代理消息:
- (BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector
{
BOOL result = NO;
if (commandSelector == @selector(insertNewline:))
{
// new line action:
// always insert a line-break character and don’t cause the receiver to end editing
[textView insertNewlineIgnoringFieldEditor:self];
result = YES;
}
else if (commandSelector == @selector(insertTab:))
{
// tab action:
// always insert a tab character and don’t cause the receiver to end editing
[textView insertTabIgnoringFieldEditor:self];
result = YES;
}
return result;
}
使用NSTextView
,它类似于多行文本框NSTextField
,它是NSText
的一个子类。如果我有误,请纠正。 NSTextView
有一个NSTextStorage
,它是NSAttributedString
的子类。您需要提供一个NSAttributedString
对象来填充其内容,而不是NSString
,因为它可以显示颜色等。
[[yourTextView textStorage] setAttributedString:attrStr];
func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
if commandSelector == #selector(NSControl.insertNewline)
{
// new line action:
// always insert a line-break character and don’t cause the receiver to end editing
textView.insertNewlineIgnoringFieldEditor(self)
return true
}
else if commandSelector == #selector(NSControl.insertTab)
{
// tab action:
// always insert a tab character and don’t cause the receiver to end editing
textView.insertTabIgnoringFieldEditor(self)
return true
}
return false
}
NSTextFieldDelegate
。