使用UITextView进行文本格式设置

时间:2014-09-19 12:02:03

标签: ipad fonts uitextview nsattributedstring

我有一个UITextView用户输入数据。我下面有一个格式栏 粗体,斜体,下划线等对齐方式等选项 经过大量的搜索和测试后,我发现NSString不支持这种大胆的斜体样式,而应使用NSAttributedString,但我使用NSAttributedString我无法进行选择文本粗体和斜体同时。

我的代码就像这样

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;
}

使用这种技术,只需按下两个按钮时dict中的最后一个字体。

我已经浏览了堆栈溢出的链接,他们使用Label的fontDescriptor来使文本既斜体又粗体但请注意我不想使用任何标签。我正在使用UITextView。我也经历过 [textView setAllowsEditingTextAttributes:YES]; 但我想要自己的功能。我还看过iOS的几个 EGOTextView TextEdit ,但我非常想在iPad上使用它。我只想使用UITextView

请告知是否有任何方法使用属性字符串使文本同时显示为斜体粗体甚至下划线或以任何方式自定义textView个人EditingTextAttributes功能的功能。

先谢谢。

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

1 个答案:

答案 0 :(得分:0)

你有一些问题。

第一:
属性是NSDictionary。这意味着使用键/值,键是唯一的! 因此,当您使用addEntriesFromDictionary:时,文档会说:

  

如果两个词典都包含相同的键,则接收字典   该键的前一个值对象被发送一个释放消息,并且   新的价值对象取而代之。

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

  

键 - 值
  NSFontAttributeName - theBoldFont
  NSFontAttributeName - theItalicFont

而您将粗体字体替换为斜体字体。

第二:
由于粗体和斜体是UIFont中的“隐藏”属性,如果要应用这两种效果,则必须找到斜体和粗体字体。这就是为什么,可以添加下划线(NSUnderlineAttributeName)而不会遇到粗体和斜体的问题 您可以查看there以了解如何解决此问题。 所以你可以用这样编写一些逻辑:

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