博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可以触发点击事件并变色的UILabel
阅读量:4880 次
发布时间:2019-06-11

本文共 3522 字,大约阅读时间需要 11 分钟。

可以触发点击事件并变色的UILabel

谁说UILabel不能够当做button处理点击事件呢?今天,笔者就像大家提供一个改造过的,能够触发点击事件并变色的UILabel:)

效果图:

还能当做计时器用囧:

源码如下:

TapLabel.h 与 TapLabel.m

////  TapLabel.h//  TapLabel////  Copyright (c) 2014年 Y.X. All rights reserved.//#import 
@class TapLabel;@protocol TapLabelDelegate
- (void)tapLabelEvent:(TapLabel *)label;@end@interface TapLabel : UILabel@property (nonatomic, assign) id
delegate; // 协议@property (nonatomic, strong) NSString *notificationName; // 设置通知中心名字@property (nonatomic, strong) NSDictionary *metaData; // 元数据@end
////  TapLabel.m//  TapLabel////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "TapLabel.h"@implementation TapLabel- (id)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self)    {        self.userInteractionEnabled       = YES;        UILongPressGestureRecognizer *tap = \        [[UILongPressGestureRecognizer alloc] initWithTarget:self                                                      action:@selector(labelEvent:)];        tap.minimumPressDuration          = 0.01f;        [self addGestureRecognizer:tap];    }    return self;}- (void)labelEvent:(UILongPressGestureRecognizer *)gesture{    // 获取到坐标值    CGPoint locationPoint = [gesture locationInView:self];        // 状态1    if (gesture.state == UIGestureRecognizerStateBegan)    {        self.highlighted = YES;    }        // 状态2    if(gesture.state == UIGestureRecognizerStateChanged)    {        if (locationPoint.x <= self.bounds.size.width && locationPoint.x >= 0 &&            locationPoint.y <= self.bounds.size.height && locationPoint.y >= 0)        {            self.highlighted = YES;        }        else        {            self.highlighted = NO;        }    }        // 状态3    if (gesture.state == UIGestureRecognizerStateEnded)    {        if (locationPoint.x <= self.bounds.size.width && locationPoint.x >= 0 &&            locationPoint.y <= self.bounds.size.height && locationPoint.y >= 0)        {                        if (_delegate) {                [_delegate tapLabelEvent:self];            }                        if (_notificationName) {                [[NSNotificationCenter defaultCenter] postNotificationName:_notificationName                                                                    object:nil                                                                  userInfo:@{
@"TapLabel": self}]; } } self.highlighted = NO; }}@end

使用时的源码:

////  RootViewController.m//  TapLabel////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "RootViewController.h"#import "TapLabel.h"@interface RootViewController ()
@end@implementation RootViewController- (void)viewDidLoad{ [super viewDidLoad]; TapLabel *tap = [[TapLabel alloc] initWithFrame:CGRectMake(0, 0, 320, 20)]; tap.textAlignment = NSTextAlignmentCenter; tap.center = self.view.center; tap.text = @"YouXianMing"; tap.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:18]; tap.delegate = self; tap.metaData = @{
@"name": @"YouXianMing"}; tap.highlightedTextColor = [UIColor redColor]; [self.view addSubview:tap];}- (void)tapLabelEvent:(TapLabel *)label{ NSLog(@"%@", label.metaData);}@end

原理解析:

1. 在初始化的时候后添加了手势处理:

2. 精确计算手势的3种状态

3. UILabel自带了highlightedTextColor:)

原理就是这么简单呢:)

 

 

 

 

 

 

 

 

 

 
 

转载于:https://www.cnblogs.com/YouXianMing/p/3938631.html

你可能感兴趣的文章
NgBook留言本开发全过程(1)
查看>>
LeetCode-指针法
查看>>
Python之路,Day12 - 那就做个堡垒机吧
查看>>
linux之shell之if、while、for语句介绍
查看>>
Mysql phpStudy升级Mysql版本,流产了怎么办?
查看>>
SQLServer之数据库行锁
查看>>
OFDM仿真
查看>>
浅谈linux内核中内存分配函数
查看>>
走近SpringBoot
查看>>
写在读研初期
查看>>
开环增益对负反馈放大电路的影响
查看>>
MySQL-ERROR 2003
查看>>
SQL Server2012-SSIS的包管理和部署
查看>>
JavaScript内置对象
查看>>
如何把js的循环写成异步的
查看>>
ER图是啥?
查看>>
too many include files depth = 1024错误原因
查看>>
HTTP协议详解(三)
查看>>
Android零基础入门第84节:引入Fragment原来是这么回事
查看>>
解析SQL Server之任务调度
查看>>