在不更改支持字符串的情况下以大写形式呈现文本? (iOS7和文本套件)

时间:2013-09-20 04:56:35

标签: ios uitextview ios7 textkit

我的应用仅针对iOS 7。我有UITextView提出NSAttributedString。字符串表示文档,每个段落都有许多属性设置在其上以进行样式设置。有些段落需要在ALL CAPS中呈现,但是,段落的样式可以由用户更改为具有常规大小写的内容,因此必须保留字符串的原始大写。

我该怎么做呢?我的第一个想法是使用新的Text Kit功能并进行某种字形替换,但是我无法解决这个问题。另一种想法是创建一个自定义字体,其中所有字符都是大写字母。

同样,我不能只改变支持字符串,因此uppercaseString之类的东西不起作用。

1 个答案:

答案 0 :(得分:1)

刚刚开始研究一些TextKit的东西,我会捅这个。

我将创建一个自定义的NSLayoutManager子类并覆盖:

- (void)setGlyphs:(const CGGlyph *)glyphs properties:(const NSGlyphProperty *)props characterIndexes:(const NSUInteger *)charIndexes font:(UIFont *)aFont forGlyphRange:(NSRange)glyphRange

在这个方法中,您需要自己进行字形生成,虽然听起来很难,如“Getting Glyphs for Characters上的CoreText文档”所述。基本上,您只需要抓取self.textStorage引用的characterIndexes引用的字符,然后使用CFStringCapitalize()使其全部上限。

请注意-setGlyphs:…方法上的文档,因为它有一些奇怪之处。

希望这至少可以指出你正确的方向。