0

我已经实现了一个 UITextView ,我可以在其中为文本加下划线,有时文本在正确的位置没有下划线,它穿过单词和句子,是否有默认方法在正确的位置为句子下划线,避免用户在保持准确性的同时触摸屏幕。非常感谢请分享您的意见。

4

2 回答 2

1

我会使用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.textViewIBOutletUITextView的,值是NSRange由你的用户交互决定的。

于 2012-12-28T15:13:27.227 回答
0

问题在于,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

如果您启用属性编辑,这正是上下文菜单添加的内容。如果您对这里的结果不满意,那么我上面的陈述就是要走的路。

于 2012-12-29T11:28:31.607 回答