UITextView で 2 つの表示モードを切り替えたい。モード 1 では略語を表示し、モード 2 では完全な単語を表示する必要があります。たとえば、「Abbr」です。対「略語」。
これを行う最良の方法は何ですか?一部の単語には同じ略語が含まれている可能性があり、ユーザーは完全な単語または略語のいずれかを自由に入力できることを覚えていますか?
これまでのところ、NSLayoutManager をサブクラス化しようとしました。省略された文字列を取得し、完全な単語を描画する必要があると仮定すると、次のメソッドを実装します。
-(void)setGlyphs:(const CGGlyph *)glyphs
properties:(const NSGlyphProperty *)props
characterIndexes:(const NSUInteger *)charIndexes
font:(UIFont *)aFont
forGlyphRange:(NSRange)glyphRange
{
NSUInteger length = glyphRange.length;
NSString *sourceString = @"a very long string as a source of characters for substitution"; //temp.
unichar *characters = malloc(sizeof(unichar) * length+4);
CGGlyph *subGlyphs = malloc(sizeof(CGGlyph) * length+4);
[sourceString getCharacters:characters
range:NSMakeRange(0, length+4)];
CTFontGetGlyphsForCharacters((__bridge CTFontRef)(aFont),
characters,
subGlyphs,
length+4);
[super setGlyphs:subGlyphs
properties:props
characterIndexes:charIndexes
font:aFont
forGlyphRange:NSMakeRange(glyphRange.location, length+4)];
}
ただし、このメソッドは、4 つの追加のグリフを挿入しようとすると、無効なグリフ インデックス「_NSGlyphTreeInsertGlyphs 無効な文字インデックス」について不平を言います。