テキストに下線を引くことができる UITextView を実装しました。テキストが適切な場所で下線を引かれず、単語や文と交差する場合があります。ユーザーが正確さを維持することを回避しながら、適切な場所で文に下線を引くデフォルトの方法はありますか?画面に触れます。あなたの意見を共有してください。
2 に答える
属性付きのテキストを使用し、UITextView
必要に応じて属性を変更します。
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"All work an no play makes Jack a dull boy."];
[attributedString addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:NSMakeRange(15, 4)];
self.textView.attributedText = attributedString;
どこにがself.textView
あり、値が であり、ユーザーの操作によって決まります。IBOutlet
UITextView
NSRange
問題は、内部的にUITextViewがUIWebDocumentView(別名WebKit)であり、HTMLには通常のテキストエディターとは異なる単語の下線の規則があることです。ここで私の分析を参照してください:http://www.cocoanetics.com/2012/12/uitextview-caught-with-trousers-down/
attributedStringを設定するアプローチは、テキスト全体しか設定できないという問題です。
UIWebDocumentView内のテキストコンテナに直接アクセスすることはできず、HTMLが複雑であるため、完璧な結果を達成することは期待できません。
この問題を解決するには、CoreTextを使用してテキストを自分でレンダリングする必要があります。私のオープンソースコンポーネントDTCoreTextは、表示に役立ちます。また、それに基づくリッチテキスト編集用の商用コンポーネントも販売しています:http://www.cocoanetics.com/2012/12/dtrichtexteditor-1-1/
PS:現在選択されている下線付きのテキスト範囲を切り替えるための標準的な方法は、toggleUnderline:
次のように定義されています。
@interface NSObject(UIResponderStandardEditActions) // these methods are not implemented in NSObject
- (void)cut:(id)sender NS_AVAILABLE_IOS(3_0);
- (void)copy:(id)sender NS_AVAILABLE_IOS(3_0);
- (void)paste:(id)sender NS_AVAILABLE_IOS(3_0);
- (void)select:(id)sender NS_AVAILABLE_IOS(3_0);
- (void)selectAll:(id)sender NS_AVAILABLE_IOS(3_0);
- (void)delete:(id)sender NS_AVAILABLE_IOS(3_2);
- (void)makeTextWritingDirectionLeftToRight:(id)sender NS_AVAILABLE_IOS(5_0);
- (void)makeTextWritingDirectionRightToLeft:(id)sender NS_AVAILABLE_IOS(5_0);
- (void)toggleBoldface:(id)sender NS_AVAILABLE_IOS(6_0);
- (void)toggleItalics:(id)sender NS_AVAILABLE_IOS(6_0);
- (void)toggleUnderline:(id)sender NS_AVAILABLE_IOS(6_0);
@end
これは、属性編集を有効にした場合にコンテキストメニューが追加するものとまったく同じです。ここでの結果に満足できない場合は、上記のステートメントが最適です。