【问题标题】:Text Formatting Using UITextView使用 UITextView 格式化文本
【发布时间】:2014-09-19 12:02:02
【问题描述】:

我有一个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 中的最后一个字体。

我已经浏览了堆栈溢出的链接,他们使用标签的 fontDescriptor 使文本成为斜体和粗体,但请注意我不想使用任何标签。我正在使用UITextView。我也经历过 [textView setAllowsEditingTextAttributes:YES]; 但我想要我自己的功能。我还看到了几个适用于 iOS 的 EGOTextViewTextEdit,但我绝对希望它适用于 iPad。我只想使用UITextView

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

提前致谢。

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

【问题讨论】:

    标签: ipad fonts uitextview nsattributedstring


    【解决方案1】:

    你有一些问题。

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

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

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

    键 - 值
    NSFontAttributeName — theBoldFont
    NSFontAttributeName — theItalicFont

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

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

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

    【讨论】:

    • 是的,我知道我可以使用 (textItalicBtn && textBoldBtn) 条件,但这会让我在代码中使用大量 if 和 else 语句,因为我正在创建一个带有许多其他选项的编辑器。我正在寻找一些消息传递给 textView ,我可以同时将其设为粗体和斜体,但长期以来我得出的结论是这是不可能的。我必须使用像 BoldItalic 和 ifElse 语句这样的英语。非常感谢您的回复和帮助。我很感激。
    猜你喜欢
    • 2014-01-13
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2018-07-23
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多