UITextview typingAttributes无法正常工作

时间:2013-09-15 21:24:39

标签: ios uitextview nsattributedstring

我有UITextView,我想将它的行高设置为50.0f,所以我使用的是打字数据,但没有任何效果,我的代码在ViewDidAppear方法中如下所示

UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, 300, 300)];

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.minimumLineHeight        = 50.0f;
paragraphStyle.lineHeightMultiple       = 50.0f;
paragraphStyle.maximumLineHeight        = 50.0f;

NSDictionary *textViewAttributeDic = [NSDictionary dictionaryWithObject:paragraphStyle forKey:NSParagraphStyleAttributeName];
textView.typingAttributes  = textViewAttributeDic;

文本没有通过设置typingAttributes来实现,我尝试使用typingAttributes更改颜色和字体但没有任何作用

我已阅读所有堆栈答案和文档

我做错了什么:(

更新的 我甚至试过

UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, 300, 300)];

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.minimumLineHeight        = 50.0f;
paragraphStyle.lineHeightMultiple       = 50.0f;
paragraphStyle.maximumLineHeight        = 50.0f;

NSDictionary *textViewAttributeDic = [NSDictionary dictionaryWithObject:paragraphStyle forKey:NSParagraphStyleAttributeName];
textView.attributedText  = [[NSAttributedString alloc] initWithString:@"" attributes:textViewAttributeDic];

当我尝试

textView.attributedText  = [[NSAttributedString alloc] initWithString:@"blahblah" attributes:textViewAttributeDic];

它有效,但我需要空文本视图,没有空格或“#bla;'字符

5 个答案:

答案 0 :(得分:4)

文档明确指出typingAttributes用于文本字段的编辑模式。

  

<强> typingAttributes

     

要应用于用户输入的新文本的属性。

     

...   如果文本字段未处于编辑模式,则此属性包含值nil。同样,除非文本字段当前处于编辑模式,否则无法为此属性指定值。

相反,您应该指定attributedText而不是text属性。指定属性的机制是通过您指定的NSAttributedString

答案 1 :(得分:3)

您可以使用文本视图中的临时文本并设置所有必需属性来在IB中配置段落样式。然后在发布textView.text = nil上清除文字视图。文本属性应保持不变。

enter image description here

答案 2 :(得分:2)

在ios6中我解决了这个问题,在textView委托中我写道:

- (void)textViewDidChange:(UITextView *)textView{

     // 1st save current selected range ... we gonna use this value in 5th step
     NSRange textViewCurrentRange =  textView.selectedRange;

     // 2nd disable scrolling in textview
     [textView setScrollEnabled:NO];

     // 3rd set the new enterd text as attributed string to textview
     [textView setAttributedText:[[NSAttributedString alloc]initWithString:textView.text attributes:self.textAttributes]];

     // 4th enable scrolling
     [textView setScrollEnabled:YES];

     // 5th re set selected range so text inidicator will get back to it's place
     textView.selectedRange = textViewCurrentRange;
 }

答案 3 :(得分:2)

这里有一个问题 - 如其他答案所述,UITextField必须处于编辑模式才能生效。如果您在模拟器中运行,并且键盘已隐藏(cmd + k),则在使用计算机键盘键入时,文本字段处于编辑模式。确保显示模拟器的键盘。

答案 4 :(得分:1)

以编程方式设置attributedText会重置typingAttributes。最后设置typingAttributes