如何在其中创建带有粗体和普通文本的UILabel或UITextView?

时间:2012-10-08 06:59:00

标签: iphone ios uilabel uitextview

我正在尝试在其中创建一个带有粗体和普通文本的UILabelUITextView

我已经浏览过attributesstring但是当我在自定义单元格的标签中设置它时,它不显示任何文本。

我还使用了UITextView setContentToHTMLString:方法,但它没有记录,app被拒绝。

任何人都可以为此提供某种解决方案吗?

5 个答案:

答案 0 :(得分:5)

直到iOS 6.0,您无法使用普通的UILabel或UITextView执行此操作,但您可以将NSAttributedString对象与一些可能的开源解决方案一起使用。

TTAttributedLabelOHAttributedLabel

iOS SDK中内置了一个解决方案you could also use a CATextLayer which has a string property that can be set to a NSAttributedString

并且,正如下面的评论者所说,是的,您可以使用"attributedText" property执行此操作。 Horray! (对于Apple倾听开发人员经常重复的功能请求)

答案 1 :(得分:5)

使用“NSAttributedString”在单个标签中设置多个字体文字&使用CATextLayer呈现它:

只是#import "NSAttributedString+Attributes.h"

然后像这样实现:

NSString *string1 = @"Hi";

NSString *string2 = @"How are you ?";

NSMutableAttributedString *attr1 = [NSMutableAttributedString attributedStringWithString:string1];

[attr1 setFont:[UIFont systemFontOfSize:20]];

NSMutableAttributedString *attr2 = [NSMutableAttributedString attributedStringWithString:string2]

[attr2 setFont:[UIFont boldSystemFontOfSize:20]];

[attr1 appendAttributedString:attr2]

CATextLayer *textLayer = [CATextLayer layer];

layer.string = attr1;

layer.contentsScale = [[UIScreen mainScreen] scale];

(Your_text_label).layer = textLayer;

OR (if you want to render on a view directly)

[(Your_View_Name).layer addSublayer:textLayer];

答案 2 :(得分:1)

我知道这是一个老线程,但这是我刚刚发现的东西。至少在Xcode版本4.6.3中,这可以通过使用属性textView来实现。更好的是,可以在Interface Builder中完成所有工作!

以下是步骤:

将textView放在所需位置 选择textView并打开Utilities面板下的Attributes选项卡 将textView文本更改为“属性” 输入所需的文字 现在,突出显示您想要加粗,加下划线等的任何文本。 单击fontName旁边的“T”按钮 在弹出窗口中,选择所需的字体(例如:粗体) 您应该会在“工具”面板中看到所需的字体 享受!

答案 3 :(得分:1)

以下代码适用于iOS 6.0及更高版本。结果是文本“This is bold”将以粗体显示,“这不是大胆的”。将是正常文本。

if ([self.registrationLabel respondsToSelector:@selector(setAttributedText:)])
{
    // iOS6 and above : Use NSAttributedStrings
    const CGFloat fontSize = 17;
    UIFont *boldFont = [UIFont boldSystemFontOfSize:fontSize];
    UIFont *regularFont = [UIFont systemFontOfSize:fontSize];
    //UIColor *foregroundColor = [UIColor clearColor];

    // Create the attributes
    NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:
                              boldFont, NSFontAttributeName, nil];
    NSDictionary *subAttrs = [NSDictionary dictionaryWithObjectsAndKeys:
                              regularFont, NSFontAttributeName, nil];
    const NSRange range = NSMakeRange(0,12); // range of " 2012/10/14 ". Ideally this should not be hardcoded

    // Create the attributed string (text + attributes)
    NSString *text = @"This is bold and this is not bold.;
    NSMutableAttributedString *attributedText =
    [[NSMutableAttributedString alloc] initWithString:text
                                           attributes:subAttrs];
    [attributedText setAttributes:attrs range:range];

    // Set it in our UILabel and we are done!
    [self.registrationLabel setAttributedText:attributedText];
}

答案 4 :(得分:0)

如果在检查器中编辑属性文本时遇到问题,请将文本复制/粘贴到富文本编辑器中,进行调整,将textView Text选项切换为Attributed并粘贴。 Vwala。