首页 > 代码库 > 给label绘制下划线
给label绘制下划线
UIlabel本身没有下划线的属性,使用绘制的方法,添加下滑下,并且赋给该label一个action作为响应方法,实现DIY超链接的效果。
//调用
#import "UnderLineLabel.h" UnderLineLabel *label = [[UnderLineLabel alloc] initWithFrame:CGRectMake(50, 200, 300, 30)]; [label setBackgroundColor:[UIColor clearColor]]; // [label setBackgroundColor:[UIColor yellowColor]]; [label setTextColor:[UIColor blueColor]]; [label setBackgroundColor:[UIColor yellowColor]]; label.highlightedColor = [UIColor redColor]; label.shouldUnderline = YES; [label setText:str andCenter:CGPointMake(200, 240)]; [label addTarget:self action:@selector(labelClicked)]; [self.view addSubview:label]; // [label release];//////"超链接执行的方法"- (void)labelClicked{ NSLog(@"%@", NSStringFromSelector(_cmd)); UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Clicked!" message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; [alertView show]; [alertView release];}
UnderLineLabel.h
#import <UIKit/UIKit.h>@interface UnderLineLabel : UILabel{ UIControl *_actionView; UIColor *_highlightedColor; BOOL _shouldUnderline;}@property (nonatomic, retain) UIColor *highlightedColor;@property (nonatomic, assign) BOOL shouldUnderline;- (void)setText:(NSString *)text andCenter:(CGPoint)center;- (void)addTarget:(id)target action:(SEL)action;@end
// UnderLineLabel.m
// UnderLineLabel.m#import "UnderLineLabel.h"@implementation UnderLineLabel@synthesize highlightedColor = _highlightedColor;@synthesize shouldUnderline = _shouldUnderline;//- (void)dealloc//{// [_actionView release],// _actionView = nil;// self.highlightedColor = nil;// [super dealloc];//}- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { } return self;}- (id)init{ if (self = [super init]) { self.font=[UIFont systemFontOfSize:6]; } return self;}- (id)initWithCoder:(NSCoder *)aDecoder{ if (self = [super initWithCoder:aDecoder]) { } return self;}- (void)setShouldUnderline:(BOOL)shouldUnderline{ _shouldUnderline = shouldUnderline; if (_shouldUnderline) { [self setup]; }}- (void)drawRect:(CGRect)rect{ NSLog(@"%@", NSStringFromSelector(_cmd)); [super drawRect:rect]; if (self.shouldUnderline) { NSLog(@"XXXXX"); CGContextRef ctx = UIGraphicsGetCurrentContext(); CGSize fontSize =[self.text sizeWithFont:self.font forWidth:self.frame.size.width lineBreakMode:NSLineBreakByTruncatingTail]; CGContextSetStrokeColorWithColor(ctx, self.textColor.CGColor); // set as the text‘s color CGContextSetLineWidth(ctx, 2.0f); CGPoint leftPoint = CGPointMake(0, self.frame.size.height); CGPoint rightPoint = CGPointMake(fontSize.width, self.frame.size.height); CGContextMoveToPoint(ctx, leftPoint.x, leftPoint.y); CGContextAddLineToPoint(ctx, rightPoint.x, rightPoint.y); CGContextStrokePath(ctx); }}- (void)setText:(NSString *)text andCenter:(CGPoint)center{ [super setText:text]; CGSize fontSize =[self.text sizeWithFont:self.font forWidth:Phone_Weight-44 lineBreakMode:NSLineBreakByTruncatingTail]; NSLog(@"%f %f", fontSize.width, fontSize.height); [self setNumberOfLines:0]; [self setFrame:CGRectMake(0, 0, fontSize.width, fontSize.height)]; [self setCenter:center];}- (void)setup{ [self setUserInteractionEnabled:TRUE]; _actionView = [[UIControl alloc] initWithFrame:self.bounds]; [_actionView setBackgroundColor:[UIColor clearColor]]; [_actionView addTarget:self action:@selector(appendHighlightedColor) forControlEvents:UIControlEventTouchDown]; [_actionView addTarget:self action:@selector(removeHighlightedColor) forControlEvents:UIControlEventTouchCancel | UIControlEventTouchUpInside | UIControlEventTouchDragOutside | UIControlEventTouchUpOutside]; [self addSubview:_actionView]; [self sendSubviewToBack:_actionView];}- (void)addTarget:(id)target action:(SEL)action{ [_actionView addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];}- (void)appendHighlightedColor{ self.backgroundColor = self.highlightedColor;}- (void)removeHighlightedColor{ self.backgroundColor = [UIColor clearColor];}@end
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。