3

在我的应用程序中,我有一个 UItextView,它的输入视图有附件视图,上面有几个按钮。

我正在尝试将已经输入的文本更改为下划线文本。它工作正常,但在转换后会丢失字体和字体大小。

这就是我正在做的事情:

NSRange selectedRange = [self.commentsTextView selectedRange];

            NSDictionary *currentAttributesDict = [self.commentsTextView.textStorage attributesAtIndex:selectedRange.location
                                                                            effectiveRange:nil];

            NSDictionary *dict;

            if ([currentAttributesDict objectForKey:NSUnderlineStyleAttributeName] == nil ||
                [[currentAttributesDict objectForKey:NSUnderlineStyleAttributeName] intValue] == 0) {

                dict = @{NSUnderlineStyleAttributeName: [NSNumber numberWithInt:1]};

            }
            else{
                dict = @{NSUnderlineStyleAttributeName: [NSNumber numberWithInt:0]};
            }

            [self.commentsTextView.textStorage beginEditing];
            [self.commentsTextView.textStorage setAttributes:dict range:selectedRange];
            [self.commentsTextView.textStorage endEditing];
4

1 回答 1

2

您正在使用仅具有 值的字典设置该文本范围的属性NSUnderlineStyleAttributeName

在您的if... else结构中,除了为fontfont sizeNSUnderlineStyleAttributeName提供dict您想要的值。

您之前是如何设置字体字体大小的?

来自 Apple 的UITextView概述部分的文档:

在 iOS 6 及更高版本中,此类通过使用属性文本属性支持多种文本样式。(iOS 的早期版本不支持样式化文本。)为此属性设置值会导致文本视图使用属性字符串中提供的样式信息。您仍然可以使用 font、textColor 和 textAlignment 属性来设置样式属性,但这些属性适用于文本视图中的所有文本。

https://developer.apple.com/library/ios/documentation/uikit/reference/uitextview_class/Reference/UITextView.html

当您为特定范围的文本设置属性时,它将仅使用新属性覆盖该范围内以前存在的任何样式。

于 2014-04-01T20:39:31.627 回答