TL; DR:是否存在在UITextView中使用项目符号的内置方式,或者是否有使用TextKit执行此操作的方法,或者是否有针对我在下面使用方法I&I描述的四个问题的单独解决方法已经在使用了?请继续阅读,了解我所尝试的方法及其中的问题。
我一直在尝试将子弹点处理添加到UITextView子类。重要的是,这应该是可编辑的,而不仅仅是显示文本。
为了添加项目符号,我获取光标当前所在段落的起始位置,并在该位置插入项目符号字符。
UITextPosition *startOfParaPosition = [self startOfCurrentParagraph];
NSInteger startOfParaOffset = [self offsetFromPosition:self.beginningOfDocument toPosition:startOfParaPosition];
NSMutableAttributedString *mAttributedString = [self.attributedText mutableCopy];
NSAttributedString *bullet = [[NSAttributedString alloc] initWithString:@"• "];
[mAttributedString insertAttributedString:bullet atIndex:startOfParaOffset];
[self setAttributedText:mAttributedString];
然后我得到了当前段落的整个范围。
NSRange range = [self rangeOfCurrentParagraph];
最后,我获取当前段落的现有样式,修改缩进,然后重新应用段落样式。
[self getParagraphStyleInString:self.attributedText range:range completion:^(NSMutableParagraphStyle *paragraphStyle) {
paragraphStyle.firstLineHeadIndent = 10.0;
paragraphStyle.headIndent = 20.0;
NSMutableAttributedString *mAttributedText = [self.attributedText mutableCopy];
[mAttributedText addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:range];
[super setAttributedText:mAttributedText];
}];
请注意,我在此处调用了[super setAttributedText:]
,因为我在self
中重载了此函数以添加其他一些样式,我不想在此时应用这些样式。
这种方法存在许多问题。
简而言之,使用NSParagraphStyle和基于字符串的项目符号似乎不是在UITextView中实现项目符号列表的好方法。我知道我可以使用带有contenteditable div的UIWebView,这确实是我一直在做的事情。但是,我不想使用方法调配来修改UIWebView键盘上的工具栏,所以更倾向于使用UITextView。我也不想使用HTML作为格式。
所以,我的问题再次提出:是否存在在UITextView中使用项目符号的内置方式,或者是否有使用TextKit执行此操作的方法,或者是否有单独的解决方法来解决我在上面使用该方法编写的四个问题我已经在使用?
提前致谢。