2014-09-19 81 views
0

我有一个UITextView用户输入数据。我有一个格式栏,下面有 粗体,斜体,下划线和其他选项,如对齐方式等 经过大量的搜索和测试后,我才知道NSString不支持这种粗体,斜体样式而应该使用NSAttributedString我使用NSAttributedString我无法使所选文本同时为粗体和斜体。使用UITextView的文本格式化

我的代码是这样的

NSMutableAttributedString *textViewText = [[NSMutableAttributedString alloc]initWithAttributedString:textView.attributedText]; 

NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:text]; 

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 

    if(textBoldBtn){ 

     UIFont *boldFont = [UIFont boldSystemFontOfSize:textView.font.pointSize]; 
     NSDictionary *boldAttr = [NSDictionary dictionaryWithObject:boldFont forKey:NSFontAttributeName]; 

     [dict addEntriesFromDictionary:boldAttr];   
    } 
    if(textItalicBtn){ 

     UIFont *italicFont = [UIFont italicSystemFontOfSize:textView.font.pointSize]; 

     NSDictionary *italicAttr = [NSDictionary dictionaryWithObject:italicFont forKey:NSFontAttributeName]; 
     [dict addEntriesFromDictionary:italicAttr]; 
    } 
    attributedText = [[NSMutableAttributedString alloc] initWithString:text attributes:dict];  
    [textViewText appendAttributedString:attributedText]; 
    textView.attributedText = textViewText; 

    return true; 
} 

使用这种技术时,按下两个按钮,只需要最后的字体在字典。

我已经通过堆栈溢出的链接,他们使用fontDescription的Label来使文本都斜体和粗体,但请注意我不想使用任何标签。我正在使用UITextView。我也经历了 [textView setAllowsEditingTextAttributes:YES]; 但我想要我自己的功能。我也看到了几个EGOTextView文本编辑对于iOS,但我严格希望为iPad。我只想使用UITextView

请告诉我们是否有任何方法使用属性字符串来使文本同时以斜体粗体和下划线或任何方式来定制textView个人EditingTextAttributes功能的功能。

在此先感谢。

*应用程序必须上传到应用程序商店,因此不需要任何私人框架,因为它们会导致应用程序拒绝。

回答

0

你有一些问题。

第一个:
属性是一个NSDictionary。这意味着键/值的作品,而关键是独一无二的!
所以,当你使用addEntriesFromDictionary:时,医生说:

如果两个字典包含相同的密钥,接收字典的 该键以前的值对象发送释放消息, 新的值对象需要它的地方。

而当你想在你的代码应用粗体和斜体效果,你认为你有:

键 - 值
NSFontAttributeName - theBoldFont
NSFontAttributeName - theItalicFont

您将粗体字替换为斜体。

二:
由于粗体和斜体是UIFont“隐藏”属性的一个,如果你想申请两个效果,你必须找到一种字体是斜体和大胆。那为什么,强调(NSUnderlineAttributeName)可以添加,而不会遇到大胆和斜体的问题。
你可以看看there了解如何处理它。 所以,你可以像这样一些代码逻辑:

if (textItalicBtn && textBoldBtn) 
{} 
else if (textItalicBtn) 
{} 
else if (textBoldBtn) 
{} 
+0

是的,我知道我可以使用(textItalicBtn && textBoldBtn)的条件,但为我创造的将花费我在我的代码使用大量的if和else语句的编辑器以及许多其他选项。我正在寻找一些消息传递给textView,我可以在同一时间使它变得粗体和斜体,但是这么长时间以来我终于认为这是不可能的。我必须像BoldItalic和ifElse语句一样使用英语。非常感谢您的回应和帮助。我很感激。 – Sahar 2014-09-21 06:44:01