3

好吧,这似乎很愚蠢,因为它无法完成 - 您可以设置一个预定义的属性字符串以显示在带有格式的文本视图上,但您不能设置通用格式以应用于在UITextView.

例如,如果我在文本视图中输入任何内容之前执行此操作:

NSString *string = @"Hello world";
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.minimumLineHeight = 50.f;
NSMutableAttributedString *aStr = [[NSMutableAttributedString alloc] initWithString:string];
[aStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0,[string length])];
mainTextView.attributedText = aStr;

然后显示格式,当我用键盘编辑文本时,格式仍然存在。

但是,如果我想从空白开始UITextView并将格式应用于用户将在视图中键入的任何内容,该怎么办?

我尝试设置string = @""or string = @" ",但这些都没有保留格式。真的没有办法将格式应用于用户输入吗?那么具有属性字符串属性的 UITextView 有什么意义呢?

根据文档,设置的text属性UITextView完全消除了属性字符串所做的任何格式设置。所以无论解决方案是什么,它都不能直接设置textView.text属性,而只能调整attributedText属性。

4

3 回答 3

7

如果我正确理解了这个问题,这就是typingAttributes属性的UITextView用途。

也就是说,您想要执行以下操作:

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.minimumLineHeight = 50.f;
mainTextView.typingAttributes = [NSDictionary dictionaryWithObject:paragraphStyle forKey:NSParagraphStyleAttributeName];
于 2012-10-17T21:23:16.097 回答
3

你的问题的关键是这个委托方法:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

你用它做的是保留一个私有字符串或属性字符串。调用此方法时,您将看到建议的新字符应该放在什么位置并可能替换一些其他字符。通过使用您的私有字符串或 textView.text 的副本并对其进行修改,您就知道拥有完整的字符串。

您可以创建一个新的属性字符串或修改您现有的,在 textView 上设置它:

textView.attributedString = myNewString;

然后返回 NO。修改旧字符串很容易,因为 NSString 已经提供了一些方法,您可以让其他字符更改指定范围内的字符。

于 2012-10-02T16:56:40.230 回答
0

您应该尝试使用的委托方法UITextView在用户输入文本时收到通知,然后更改此方法中的文本属性。

于 2012-10-02T15:37:31.640 回答