iOS-关于Cell上Button点击效果

在iOS开发中,我曾遇到这样一个问题,很久都未能解决,就是在cell上添加一个button,当我们点击button时,它是没有高亮效果的,除非我们长按button,我这里整理一下解决这个问题的方法 原文链接: http://stackoverflow.com/questions/19256996/uibutton-not-showing-highlight-on-tap-in-ios7 解决方案一:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"Button点击效果测试";
    
    self.tableView.delaysContentTouches = NO;
    
    // iOS7
    for (id view in self.tableView.subviews)
    {
        if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewWrapperView"])
        {
            if([view isKindOfClass:[UIScrollView class]])
            {
                UIScrollView *scroll = (UIScrollView *) view;
                scroll.delaysContentTouches = NO;
            }
            break;
        }
    }
    
    // iOS8 注意,本人测试系统iOS10,没有走这个方法,走上面那个方法
    for (id view in self.tableView.subviews)
    {
        if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewCellScrollView"])
        {
            if([view isKindOfClass:[UIScrollView class]])
            {
                UIScrollView *scroll = (UIScrollView *) view;
                scroll.delaysContentTouches = NO;
            }
            break;
        }
    }
    
    // 该方式相当于上面两个循环的合集,并且实现方式更加优雅,推荐使用它,而不是使用上面两个循环
    for (id obj in self.tableView.subviews) {
        if ([obj respondsToSelector:@selector(setDelaysContentTouches:)]) {
            [obj setDelaysContentTouches:NO];
        }
    }
}

解决方案二:

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [super touchesBegan:touches withEvent:event];
    [NSOperationQueue.mainQueue addOperationWithBlock:^{ self.highlighted = YES;}];
}

-(void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [super touchesCancelled:touches withEvent:event];
    [self performSelector:@selector(setDefault) withObject:nil afterDelay:0.1];
}

-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [super touchesEnded:touches withEvent:event];
    [self performSelector:@selector(setDefault) withObject:nil afterDelay:0.1];
}

- (void)setDefault
{
    [NSOperationQueue.mainQueue addOperationWithBlock:^{ self.highlighted = NO; }];
}

该方案比较简单粗暴,我们创建一个UIButton的分类,然后将它导入pch文件中,就彻底解决了button的点击效果问题,比起方案一要简单一些

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏哈雷彗星撞地球

iOS Bluetooth 打印小票(一)蓝牙打印机命令打印命令一览表打印的各个命令详解1.初始化命令2.打印命令3.行间距设置命令4.对齐方式设置5.字符设置命令6.钱箱控制命令7.按键控制命令8.

在iOS app中连接蓝牙打印机打印商品小票,在没有电脑只有手机的情况下,感觉非常实用,而且最近经常最近公司正好也在做这个功能,所以就研究了下。这一篇主要讲一下...

1063
来自专栏一个爱瞎折腾的程序猿

文档管理项目

然后在web.config中的<system.web> </system.web>中加入如下代码

1001
来自专栏我爱编程

猫眼Top100

1504
来自专栏王大锤

iOS 修改UIWebView的UserAgent

2998
来自专栏蜉蝣禅修之道

iOS开发之CFHttpMessageRef的那些坑

2346
来自专栏应兆康的专栏

Python使用本地shadowsocks代理

611
来自专栏林德熙的博客

win10 uwp 如何让WebView标识win10手机

本文主要:如何让WebView访问的网页识别为手机. 当然这句话我说不好,换个,如何让 WebView 识别为手机。 上面两句话都是错的,因为是服务器识别,不是...

602
来自专栏有趣的Python

一键评教,查询成绩,批量免验证码选课,退课,-云大urp教务系统大作战(3)

这一小节没有什么好讲的,如果你学会了上一小节的中心思想: 从真实世界看程序世界 那么我们可以触类旁通的继续通过f12控制台对于真实的查询成绩,加课,退课,教...

2174
来自专栏Python爬虫与算法进阶

Python最假的库:Faker

前辈在review的时候说怎么这么复杂,Python中有一个专门生成各类假数据的库:Faker,你去了解下。

2224
来自专栏互联网开发者交流社区

SQL基础分页存储过程(案例一)

1265

扫码关注云+社区