UITextField添加点击高亮状态

一、继承自UITextfield自定义一个SSTouchTextField

代码如下:

#import "SSTouchTextField.h"

@implementation SSTouchTextField

#pragma mark - Private

- (void)setBackgroundHighlighted:(BOOL)highlighted{
    [UIView animateWithDuration:0.3f delay:0.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
        if (highlighted) {
            [self setBackgroundColor:SS_LINE_COLOR];

        } else {
            [self setBackgroundColor:[UIColor clearColor]];
        }

    } completion:^(BOOL finished) {

    }];
}

#pragma mark - Overwrite

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{
    [super touchesBegan:touches withEvent:event];
    [self setBackgroundHighlighted:YES];
}

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{
    [super touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{
    [super touchesEnded:touches withEvent:event];
    [self setBackgroundHighlighted:NO];
}

- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{
    [super touchesCancelled:touches withEvent:event];
    [self setBackgroundHighlighted:NO];
}

// 增大点击区域
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{

    CGPoint convertPoint = [self convertPoint:point toView:self.superview];

    UIEdgeInsets edgeInset = UIEdgeInsetsMake(0, 100, 0, 100);
    CGRect edgeFrame = CGRectMake(self.view_minX - edgeInset.left,
                                  self.view_minY - edgeInset.top,
                                  self.view_width + edgeInset.left + edgeInset.right,
                                  self.view_height + edgeInset.top + edgeInset.bottom);

    CGRect convertFrame = [self.superview convertRect:edgeFrame toView:self.superview];
    if (CGRectContainsPoint(convertFrame, convertPoint)) {

        return self;
    }

    return [super hitTest:point withEvent:event];
}

@end

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏lgp20151222

RestTemplate的异常:Not enough variables available to expand

原因:RestTemplate使用出错,我的情况是不知道这里要求用RestTemplate的使用格式,应该很多人都是这样吧?不过,看了下RestTemplate...

19540
来自专栏向治洪

React native城市列表组件

城市列表选择是很多app共有的功能,比如典型的美图app。那么对于React Native怎么实现呢? ? 要实现上面的效果,首先需要对界面的组成简单分析,界...

59080
来自专栏码字搬砖

scrapy之user-agent池

常见的反爬策略有很多,今天我们一起跟随小省开始,ua的反爬之旅,咳咳咳,敲黑板喽!

33010
来自专栏coding...

iOS开发实战-基于SpriteKit的FlappyBird小游戏写在前面SpriteKit简介效果分析代码关于游戏上架TipsDemo地址还没结束

蛋疼广电粽菊要求国内游戏必须备案... 我们只是想上个小游戏而已~难道还要再等个大半个月去备案么? Apple也妥协了 在备注那里要求中国区上架游戏必须填写...

16920
来自专栏MelonTeam专栏

Bitmap 源码阅读笔记

导语: Android 系统上的图片的处理,跟Bitmap 这个类脱不了关系,我们有必要去深入阅读里面的源码,以便在工作中能更好的处理Bitmap相关的问题...

32880
来自专栏一个会写诗的程序员的博客

ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class

ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor a...

12950
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

1.3K80
来自专栏从零开始的linux

linux基础命令6

tr命令 # tr 'a-z' 'A-Z' < /etc/fstab # # /ETC/FSTAB # CREATED BY ANACONDA ON THU ...

30370
来自专栏运维一切

apache正向代理配置 原

19130
来自专栏Java学习网

手把手教你玩转 CSS3 3D 技术

css3的3d起步 要玩转css3的3d,就必须了解几个词汇,便是透视(perspective)、旋转(rotate)和移动(translate)。透视即是以现...

39380

扫码关注云+社区

领取腾讯云代金券