UITableview 单元格中的按钮不会在快速点击时突出显示
Posted
技术标签:
【中文标题】UITableview 单元格中的按钮不会在快速点击时突出显示【英文标题】:Buttons in UITableview cell doesn't get highlighted on fast clicks 【发布时间】:2013-12-16 14:55:36 【问题描述】:我在 UITableview 单元格中添加了自定义 UIButton。 使用以下代码:-
UIButton *btnOtherCount=[UIButton buttonWithType:UIButtonTypeCustom];
btnOtherCount.frame=CGRectMake(577, 43, 110, 60);
[btnOtherCount setBackgroundImage:[UIImage imageNamed:@"orange.png"] forState:UIControlStateNormal];
[btnOtherCount setTitle:@" Nonfiction - Other - 0" forState:UIControlStateNormal];
btnOtherCount.titleLabel.lineBreakMode=NSLineBreakByWordWrapping;
btnOtherCount.titleLabel.textAlignment = NSTextAlignmentCenter;
btnOtherCount.titleLabel.font=[UIFont boldSystemFontOfSize:13.0f];
[btnOtherCount setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[btnOtherCount addTarget:self action:@selector(done:) forControlEvents:UIControlEventTouchDown];
[cell.contentView addSubview:btnOtherCount];
问题是,当我尝试单击单元格中的按钮时,它不会突出显示以快速触摸,或者如果我单击快速或连续触摸一个接一个等等。但是当我稳定且更有力地单击时(不是长按),它会突出显示。
重要的是在这两种情况下都会调用相应的操作方法,即在慢速点击和快速点击中。
【问题讨论】:
【参考方案1】:这是 ios7 的一个新问题。 UITableviewCell 的视图层次结构中现在有一个滚动视图。该滚动视图检查它是否需要在按钮获得触地事件之前接管触摸操作。对此有一个 hack 修复,在您的单元初始化中添加以下代码:
for (id obj in self.subviews)
if ([NSStringFromClass([obj class]) isEqualToString:@"UITableViewCellScrollView"])
UIScrollView *scroll = (UIScrollView *) obj;
scroll.delaysContentTouches = NO;
break;
这并不理想,但它适用于我的细胞。我不使用 UITableViewCell 内的滚动视图,所以我可以做这个 hack。如果您需要滚动视图的功能,那么这可能会给您带来麻烦。
【讨论】:
这是一个非常脆弱的修复。它依赖于操作 UIKit 中的私有类。糟糕的魔力。 还有一个可怕的内存泄漏与动画表格单元格是由调配函数修复的。在修复内部代码之前,这些脆弱的修复都是可以完成的。或者您可以处理 iOS7 的新“改进”行为。 @Putz1103 ,嘿,谢谢你的帮助,但仍然没有任何区别。 在模拟器上看起来没有区别,但在设备上它可以工作。如果在设备上它仍然无法工作,那么您无能为力。现在这是 iOS7 内置的行为,除了这些 hack 实现之外无法处理。以上是关于UITableview 单元格中的按钮不会在快速点击时突出显示的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 的单元格中的 iOS Swift Like 按钮
如何获取 UITableView 单元格中的 UIButton 的绝对 x,y