强调UILabel的某个部分

时间:2013-05-13 10:23:44

标签: ios uilabel

正如标题所示,我需要强调UILabel的某个部分。例如:Please click ESPNSoccernet to read the latest Football News.我想强调ESPNSoccernet这个词。这是因为我希望它可以点击,并且需要链接到网站。

需要一些指导才能做到这一点。如果还有其他办法,请告诉我......

8 个答案:

答案 0 :(得分:14)

对于ios 6,您可以使用AttributedStrings

NSMutableAttributedString *yourString = [[NSMutableAttributedString alloc] initWithString:@"Please click ESPNSoccernet to read the latest Football News."];
[yourString addAttribute:NSUnderlineStyleAttributeName
                        value:[NSNumber numberWithInt:1]
                        range:(NSRange){0,25}];

label.attributedText = [yourString copy];

您还可以使用第三方UILable库TTTAttributedLabel

答案 1 :(得分:2)

在Xcode中:

  1. 选择标签并选择身份检查员。
  2. 在文本中选择Attributed而不是plain。
  3. 现在选择要加下划线的文本部分。
  4. 选择字体并选择字体样式下划线。
  5. 你去吧。

答案 2 :(得分:2)

Swift 2.0:

1)创建一个带有下划线属性的nsmutablestring并添加到sampleLabel的文本中。

2)向sampleLabel添加点击手势并关联方法以进行进一步操作。

override func viewDidLoad() {
    super.viewDidLoad()

    let newsString: NSMutableAttributedString = NSMutableAttributedString(string: "Tap here to read the latest Football News.")
    newsString.addAttributes([NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleDouble.rawValue], range: NSMakeRange(4, 4))
    sampleLabel.attributedText = newsString.copy() as? NSAttributedString

    let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapResponse:")
    tapGesture.numberOfTapsRequired = 1
    sampleLabel.userInteractionEnabled =  true
    sampleLabel.addGestureRecognizer(tapGesture)

}
func tapResponse(recognizer: UITapGestureRecognizer) {
    print("tap")
}

答案 3 :(得分:1)

UILabel只能显示纯文本字符串(在iOS 6中,它现在也可以显示NSAttributedString,但这在旧的iOS版本中不起作用,所以最好不要依赖于此,所以你不能用标签来做这件事。

您可以查看TTTAttributedLabel以显示属性文本(这样您就可以添加下划线和其他格式),但您将无法使用此类添加超链接。

您对字符串的可点击片段的选项基本上是:

  1. 使用普通UILabel并将UIButton覆盖在您想要点击的部分上,或

  2. 使用TTTAttributedLabel来实现下划线效果,使用UITapGestureRecognizer来检测和处理点击(请注意,这会捕获整个标签上的点击,而不是只是加下划线的部分。)

  3. 对于iOS 6:

    UILabel *label = [[UILabel alloc] init];
    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Tap here to read the latest Football News."];
    [string addAttribute:NSUnderlineStyleAttributeName value:@(1) range:NSMakeRange(4, 4)];
    label.attributedText = [string copy];
    

    对于早期的iOS版本以及iOS 6:

    TTTAttributedLabel *label = [[TTTAttributedLabel alloc] init];
    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Tap here to read the latest Football News."];
    [string addAttribute:NSUnderlineStyleAttributeName value:@(1) range:NSMakeRange(4, 4)];
    label.text = [string copy];
    

    然后添加手势识别器并实施handleTap:

    UITapGestureRecognizer *recogniser = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    [label addGestureRecognizer:recogniser];
    
    - (void)handleTap:(UITapGestureRecognizer *)recogniser {
        // Handle the tap here
    }
    

答案 4 :(得分:1)

好吧,我做了同样的事情:

制作带文字的自定义按钮:ESPNSoccernet和背景clearColor 添加标签作为子视图,高度为1,并为此按钮添加一些背景颜色,使“ESPNSoccernet”显示为下划线。 将剩余的文本放在与此按钮相邻的标签中,使其看起来像一个完整的文本。

希望它有所帮助!

注意:如果你只做> iOS 6.0,你可能想检查其他答案。

答案 5 :(得分:0)

如果这个应用程序适用于ios 6或更高版本,那么你可以使用NSMutableAttributedString

  NSMutableAttributedString *labelText = [[NSMutableAttributedString alloc] initWithString:@"Hello this is demmy label for testing"];
    [labelText addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:1]
       range:(NSRange){10,10}];

    label.attributedText = labelText;

对于较少版本,您可以像这样使用..

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 116, 171, 20)];
label.text = @"Hello this is demmy label for testing";
label.textColor = [UIColor whiteColor];
label.font = [UIFont systemFontOfSize:16];
[self.view addSubview:label];

//underline code
CGSize expectedLabelSize = [[m_BCListArray objectAtIndex:tagcount] sizeWithFont:label.font constrainedToSize:label.frame.size lineBreakMode:UILineBreakModeWordWrap];

UIView *viewUnderline=[[UIView alloc] init];
viewUnderline.frame=CGRectMake((label.frame.size.width - expectedLabelSize.width)/2,    expectedLabelSize.height + (label.frame.size.height - expectedLabelSize.height)/2,   expectedLabelSize.width, 1);
viewUnderline.backgroundColor=[UIColor whiteColor];
[self.view addSubview:viewUnderline];

答案 6 :(得分:0)

以下代码段产生了所需的结果:

    NSDictionary *dictAttribute = @{NSForegroundColorAttributeName:[UIColor redColor],NSUnderlineStyleAttributeName:@1};        
    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:@"Please click ESPNSoccernet to read the latest Football News." attributes:dictAttribute];

    lblText.attributedText = attrString;

答案 7 :(得分:-2)

您可以使用UIWebView并为其插入一些HTML代码以获得所需的格式。 HTML还包括能够超链接的奖励,尽管网页将包含在Web视图本身内。

编辑:此方法适用于iOS 2.0及更高版本,因此旧设备上没有问题。

要执行此操作,请在所需视图中添加UIWebView并为其创建一个插座(出于演示目的,我将称之为我的webView)。

viewDidLoad方法中,添加:

NSString *HTML = @"<p>Please click <a href=\"http://www.espnfc.com\">ESPNSoccernet</a> to read the latest Football News</p>";
[webView loadHTMLString:HTML baseURL:nil];

希望这会有所帮助......