正如标题所示,我需要在 UILabel 的某个部分下划线。例如:Please click ESPNSoccernet to read the latest Football News.
我想在 ESPNSoccernet 这个词下划线。这是因为我希望它可以点击并且需要链接到网站。
需要一些指导。如果有其他方法,请告诉我...
对于 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。
在 Xcode 中:
你去吧。
斯威夫特 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")
}
UILabel
只能显示纯文本字符串(在 iOS 6 中它现在也可以显示NSAttributedString
s,但这在旧的 iOS 版本中不起作用,所以最好不要依赖它),所以你将无法做到这一点一个标签。
您可以查看TTTAttributedLabel以显示属性文本(因此您可以添加下划线和其他格式),但您将无法使用此类添加超链接。
您对字符串的可点击段的选项基本上是:
在您希望可点击的部分上使用纯文本UILabel
并覆盖 a ,或UIButton
用于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];
对于早期的 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
}
好吧,我做了同样的事情:
制作一个带有文本的自定义按钮:ESPNSoccernet 和背景 clearColor 将标签作为高度为 1 的子视图和一些背景颜色添加到此按钮,这样“ESPNSoccernet”看起来就带有下划线。将剩余的文本放在与此按钮相邻的标签中,使其看起来像一个完整的文本。
希望能帮助到你!
注意:如果你只做 >iOS 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;
如果此应用适用于 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];