5

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

需要一些指导。如果有其他方法,请告诉我...

4

7 回答 7

15

对于 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];

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

于 2013-05-13T10:29:34.887 回答
2

在 Xcode 中:

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

你去吧。

于 2014-02-13T04:58:45.000 回答
2

斯威夫特 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")
}
于 2016-02-11T09:55:10.180 回答
1

UILabel只能显示纯文本字符串(在 iOS 6 中它现在也可以显示NSAttributedStrings,但这在旧的 iOS 版本中不起作用,所以最好不要依赖它),所以你将无法做到这一点一个标签。

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

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

  1. 在您希望可点击的部分上使用纯文本UILabel并覆盖 a ,或UIButton

  2. 用于TTTAttributedLabel实现下划线效果,aUITapGestureRecognizer用于检测和处理敲击(注意这将捕获整个标签上的敲击,而不仅仅是下划线部分)。

对于 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];

对于早期的 iO​​S 版本以及 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
}
于 2013-05-13T10:30:27.127 回答
1

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

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

希望能帮助到你!

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

于 2013-05-13T10:40:22.207 回答
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;
于 2014-03-21T10:13:18.017 回答
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];
于 2013-05-13T10:40:01.357 回答