如果UIButton比较常见的作为UITableViewCell里的子类,当你在点击它时,它默认不会立马显示高亮,这是因为iOS系统会默认会延迟150ms的时间去检查当前该事件是否能够出发UITableView的滑动,如果 NO,UIScrollView会立马将接收到的手势分发到子视图上,如果YES,默认是不显示高亮的。
1、将UIButton所有属于UIScrollView的父视图的delaysContentTouches属性设置成为NO。
2、继承UIScrollView或UITableView,并重写- (BOOL)touchesShouldCancelInContentView:(UIView*)view方法,让其响应拖动方法
#import <UIKit/UIKit.h>
@interface TUNoDelayHighlightTableView : UITableView
@end
#import "TUNoDelayHighlightTableView.h"
@implementation TUNoDelayHighlightTableView
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self)
{
[self reWriteSetting];
}
return self;
}
- (id) initWithFrame:(CGRect)frame style:(UITableViewStyle)style
{
if (self = [super initWithFrame:frame style:style]) {
[self reWriteSetting];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self reWriteSetting];
}
return self;
}
- (void) reWriteSetting
{
self.delaysContentTouches = NO;
for (id view in self.subviews)
{
// looking for a UITableViewWrapperView
if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewWrapperView"])
{
// this test is necessary for safety and because a "UITableViewWrapperView" is NOT a UIScrollView in iOS7
if([view isKindOfClass:[UIScrollView class]])
{
// turn OFF delaysContentTouches in the hidden subview
UIScrollView *scroll = (UIScrollView *) view;
scroll.delaysContentTouches = NO;
}
break;
}
}
}
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
if ([view isKindOfClass:[UIButton class]] || [view isKindOfClass:[UIImageView class]])
{
return YES;
}
return [super touchesShouldCancelInContentView:view];
}
@end
我在项目中遇到了这些问题并已解决,希望可以帮到你,Best wishes