我已经实现了一个 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/
设置属性字符串的方法是您只能设置整个文本的问题。
由于我们无法直接访问 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
如果您启用属性编辑,这正是上下文菜单添加的内容。如果您对这里的结果不满意,那么我上面的陈述就是要走的路。