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 单元格中的特定按钮图像

UITableView 的单元格中的 iOS Swift Like 按钮

iOS:UITableView 选择性触摸

如何获取 UITableView 单元格中的 UIButton 的绝对 x,y

UITableView 单元格中的 UIButton,例如“删除事件”

自定义 UITableView 单元格中的 UILabel 未随核心数据更改而更新