在我的应用中,我需要在标签中显示在线下文字,因此我使用以下代码显示带下划线的文字
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:normalString];
[attributeString addAttribute:NSUnderlineStyleAttributeName
value:[NSNumber numberWithInt:1]
range:(NSRange){0,[attributeString length]}];
wesiteAddressLabel.attributedText = attributeString;
此方法和其他一些在iOS 6.1中正常工作的实现
但是当我在iOS 5.1及更低版本中执行时,app会因为原因而崩溃,
[attributeString addAttribute:NSUnderlineStyleAttributeName
value:[NSNumber numberWithInt:1]
range:(NSRange){0,[attributeString length]}];
以前版本不支持
所以我想使用respondsToSelector:
方法检查实例是否响应并为不支持的选择器实现另一种方法。
我如何使用这种方法?
答案 0 :(得分:2)
从文档中可以看出:
attributedText标签显示的样式文本。
@property(非原子,复制)NSAttributedString * attributedText 讨论默认情况下,此属性为零。为...分配新值 此属性还将text替换为text属性的值 相同的字符串数据,尽管没有任何格式信息。在 另外,分配一个新的值会更新字体中的值, textColor和其他与样式相关的属性使它们反映出来 样式信息从属性字符串中的位置0开始。
可用性适用于iOS 6.0及更高版本。在UILabel.h中声明
您应该检查特定的UIView
元素是否能够响应attributedText
。在这种情况下:
[wesiteAddressLabel respondsToSelector:@selector(attributedText)];
应该够了
答案 1 :(得分:1)
对于previoes版本,您必须在文本下方绘制UIImageView
,方法是在每行中获取文本的with和Height。
或者您可以使用DrawRect
方法创建一个标签类别。
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(ctx, 0.0f/255.0f, 0.0f/255.0f, 255.0f/255.0f, 1.0f); // Your underline color
CGContextSetLineWidth(ctx, 1.0f);
UIFont *font = [UIFont systemFontOfSize:16.0f];
CGSize constraintSize = CGSizeMake(MAXFLOAT, MAXFLOAT);
CGSize labelSize;
labelSize = [self.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
CGContextMoveToPoint(ctx, 0, self.bounds.size.height - 1);
CGContextAddLineToPoint(ctx, labelSize.width + 10, self.bounds.size.height - 1);
CGContextStrokePath(ctx);
[super drawRect:rect];
}