我试图允许在 UITextView 中输入不同样式的文本,有点像使用粗体或斜体等简单属性的文本编辑器。我通过使用 textView 来理解attributedText
属性 我可以将属性应用于特定范围的文本。这很好,但我希望能够在 textView 中输入属性文本,这将通过按钮进行切换(例如输入粗体文本)。
到目前为止我的想法是:
我用过-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
UITextView委托方法采取text
参数,并通过创建具有相同文本的 NSAttributedString 来使用属性修改它。然后创建一个 NSMutableAttributedString,它是textView
的属性文本。使用附加两个appendAttributedString
,然后设置textView的attributedText
属性到结果的 attributeString。
这是代码:
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if (self.boldPressed) {
UIFont *boldFont = [UIFont boldSystemFontOfSize:self.textView.font.pointSize];
NSDictionary *boldAttr = [NSDictionary dictionaryWithObject:boldFont forKey:NSFontAttributeName];
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc]initWithString:text attributes:boldAttr];
NSMutableAttributedString *textViewText = [[NSMutableAttributedString alloc]initWithAttributedString:textView.attributedText];
[textViewText appendAttributedString:attributedText];
textView.attributedText = textViewText;
return NO;
}
return YES;
}
每次键入字符时都必须重置 textViews attributeText 对于一个简单的操作来说似乎有点太多了。不仅如此,它还无法正常工作。启用粗体属性后,效果如下:
这有两个问题。最明显的是如何将每个新角色放入新行。但同样奇怪的是,插入点始终位于文本视图中文本的第一个索引处(仅当启用粗体时,但粗体字符会插入新行)。因此,如果您在启用粗体的情况下键入,然后关闭粗体,则在所有现有文本前面键入简历。
我不确定为什么会发生这些错误。我也不认为我的解决方案非常有效,但我想不出任何其他实现它的方法。
这是什么setTypingAttributes:
是为了.每当用户按下您的属性按钮之一时,将其设置为您的属性字典,并且新字符将选取所请求的属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)