UITableView 不响应透明区域的触摸

Posted

技术标签:

【中文标题】UITableView 不响应透明区域的触摸【英文标题】:UITableView does not respond to touches at transparent areas 【发布时间】:2013-01-09 03:16:14 【问题描述】:

我有一个UITableView和一个透明的backgroundColor,里面的单元格用下面的代码初始化

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

  self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  if (self) 
    self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, CGRectGetWidth(self.contentView.frame), 180)];
    self.label.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    self.label.text = @"test";
    [self.contentView addSubview:self.label];
  
  return self;

每行的高度为 200,并且标签不会填满整个单元格。每个单元格之间会有透明部分。当我尝试通过触摸这些透明部分来滚动表格时,这些触摸将被完全忽略。我知道从 ios5 开始,对视图的触摸将被忽略。我该怎么做才能解决这个问题?

我尝试过但不起作用的方法:

设置一个透明或隐藏或 alpha = 0 UIView 来充当 tableView 的假背景

同样的处理,触摸被忽略。

在tableView之上创建一个子类UIView,子类UIView使用tableView作为nextResponder

显然UITableView 不使用 touchesBegan/cancelled/ended/moved,所以这不起作用。我认为实现我的方法来滚动UITableView 也不明智。

设置tableView的backgroundColor为[UIColor colorWithRed:0 green:0 blue:0 alpha:0.1]

我不想这样做,它仍然可见。

简而言之,即使从透明部分开始滚动,我该怎么做才能滚动表格?

【问题讨论】:

亲爱的@Augustine,您可以通过其他委托滚动方法(在UIScrollview 中提供)来完成您的任务。您能说明一下您为什么要使用touchesBegan 方法吗?跨度> 我在想我可以使用 touchesBegan 在触摸被忽略之前拦截触摸,因为触摸区域是透明的,但显然这不起作用。 我尝试将 scrollViewDidScroll 和 scrollViewWillBeginDragging: 放入 tableView 的委托中,但是当我从透明部分开始滚动时,两者都没有被调用。 PS如何为关键字设置灰色背景?就像您在评论中为 UIScrollview 和 touchesBegan 所做的一样。 对于灰色,使用在 `` 之间写下你的文字(向左键 1 的按钮:按两次并在它们之间写下你的文字):) 【参考方案1】:

首先,您创建一个没有文本(或视图)的标签,使其完全填满单元格。然后使用您的文本创建一个新标签并将其添加为第一个视图的子视图。

【讨论】:

不起作用,不幸的是,当我让第一个视图为backgroundColor 提供[UIColor clearColor] 时,它仍然会被忽略

以上是关于UITableView 不响应透明区域的触摸的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 在滚动时不响应某些触摸

如何在(libgdx)阶段检测对图像透明区域的触摸?

gt911触摸屏边缘一部分区域不响应触摸

SKSpriteNode 纹理 alpha 是不是影响触摸区域?

UITableView tableHeaderView中的UIButton没有响应触摸

当按下另一个可触摸的不透明度时,一个可触摸的不透明度不会按下