1

UITextView はその NSLayoutManager を公開し、テキストの編集時にクライアントがカスタム スタイルを追加できるようにします (たとえば、この記事では構文の強調表示を使用して UITextView を実装しています: http://www.objc.io/issue-5/getting-to-know-textkit.html ) 。

UITextField の基礎となる NSLayoutManager を取得して、同様のカスタマイズを可能にする方法はありますか?

4

2 に答える 2

-2

でレイアウトマネージャーにアクセスできますtextView.layoutManager。すべてのオブジェクトを自分で作成することにより、独自のレイアウト マネージャーを割り当てることができます。

NSTextStorage* textStorage = [[NSTextStorage alloc] initWithString:string];

// you could create a subclass of NSLayoutManager here
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
[textStorage addLayoutManager:layoutManager];

self.textContainer = [[NSTextContainer alloc] initWithSize:self.view.bounds.size];
[layoutManager addTextContainer:self.textContainer];

UITextView* textView = [[UITextView alloc] initWithFrame:self.view.bounds textContainer:self.textContainer];
[self.view addSubview:textView];

ただし、構文の強調表示を行おうとしている場合、それは私がとるアプローチではありません。ユーザーが行った変更を検出するためにサブクラスUITextView化し、その時点で独自の構文強調表示を追加することをお勧めします[self.storage addAttributes:range:]

私が書いたこのクラスを OS X から iOS に移植することはおそらくそれほど難しくないでしょう: https://github.com/abhibeckert/Dux/blob/master/Dux/DuxSyntaxHighlighter.m — 構文の強調表示を NSTextStorage に適用します。優れたパフォーマンスとさまざまな言語のサポート。

于 2014-06-08T23:52:49.780 に答える