【发布时间】:2011-02-01 11:07:09
【问题描述】:
我有一个 NSTextField,用户可以在其中编写文本。我希望能够制作 3 个按钮:粗体、斜体和下划线;这些按钮应该将文本字段中的用户选择更改为粗体、斜体或下划线。
谁能给我指点一下如何做到这一点?
【问题讨论】:
标签: objective-c cocoa nstextfield
我有一个 NSTextField,用户可以在其中编写文本。我希望能够制作 3 个按钮:粗体、斜体和下划线;这些按钮应该将文本字段中的用户选择更改为粗体、斜体或下划线。
谁能给我指点一下如何做到这一点?
【问题讨论】:
标签: objective-c cocoa nstextfield
首先是启用富文本支持,您可以在 Interface Builder 中通过检查检查器中的“富文本”选项或使用setAllowsEditingTextAttributes: 的代码来实现。
那就是NSAttributedStrings。
不过,最大的问题是您似乎需要对所选文本应用更改。 NSTextFields 无法做到这一点。仅限NSTextViews。
如果你能改变它,那就去吧,它会让事情变得更容易。但是,如果您确实需要坚持使用NSTextField,您可能需要访问字段编辑器。每个窗口都有一个关联,它是在幕后处理文本的。
NSTextView *editor = (NSTextView *)[window fieldEditor:YES forObject:myTextField]
然后就可以愉快的调用NSTextView的方法setSelectedTextAttributes:了。
阅读有关字段编辑器here at Apple 和in CocoaDev 的更多信息
【讨论】:
假设你的 NSTextfield * 是 textField,下面的代码强调了选择:
NSMutableAttributedString * as = [[[textField attributedStringValue] mutableCopy] autorelease];
[as beginEditing];
[as addAttribute:NSUnderlineStyleAttributeName
value:[NSNumber numberWithInt:NSUnderlineStyleSingle]
range:[[[textField window] fieldEditor:YES forObject:textField] selectedRange]];
[as endEditing];
[textField setAttributedStringValue:as];
【讨论】:
[[[textField attributedStringValue] mutableCopy] autorelease]?)我想知道,你能问一下字段编辑器的选择是什么吗?