修复触摸在 UITableViewCell 内的 UILabel 上不起作用?

Posted

技术标签:

【中文标题】修复触摸在 UITableViewCell 内的 UILabel 上不起作用?【英文标题】:Fix touch not working on UILabel inside UITableViewCell? 【发布时间】:2019-05-03 10:45:22 【问题描述】:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath


    if (tableView == sessionListTable)
        selectedSessionId = [[self.sessionNames objectAtIndex:indexPath.row] objectForKey:@"session_id"];
        selectedSessionName = [[self.sessionNames objectAtIndex:indexPath.row] objectForKey:@"session_name"];
        NSLog(@"%@",selectedSessionId);
        [StudentCommon sharedInstance].mTeacherSessionId = selectedSessionId;
        [self remoteSessionButtonClick];
        currentIndexPath = indexPath;
        previousIndexPath = currentIndexPath;
        [sessionListTable reloadData];
        [sessionListPopUp removeFromSuperview];
    

表格视图中的TheUILabel` 对触摸没有响应,尽管触摸仅在单元格的空白区域中起作用。

验证所有连接、约束和类。

【问题讨论】:

默认不启用UILabel 用户交互。请检查一下。如果未启用,则启用并检查。 这是不可能的。如果您正在调用 UITableViewDelegate 的 didSelectRow,点击标签应该可以正常工作。向我们展示代码。 @Nitish 嗨,我的项目确实发生了这种情况,UILabel 没有响应触摸。只有单元格内的空白区域响应触摸事件。后来发现在Attribute Inspector里面,一些自定义属性是在User Defined Runtime Attributes下设置的,导致这个问题。 请提供您如何处理用户交互的代码。 【参考方案1】:Attribute Inspector中检查UI内部元素的所有属性, 确保所有用户交互都被“勾选”了 ☑️ 检查 User Defined Runtime Attributes 中的属性并删除哪些是 不需要。 检查类名是否是正确的“超类”/“相关自定义类”。 检查Connections Inspector里面的连接是否有任何警告⚠️,如果存在警告删除连接并重新连接。

This is the image showing the User Defined Runtime Attributes, which was causing this error

【讨论】:

【参考方案2】:

首先您应该知道 UILabel 不会响应 TouchUpInside 事件。 除此之外,在 UITableViewCell 中引发的事件在 superview 中是不可捕获的(即托管相应表的 UITableViewController 或 UIViewController)。

为了实现您的目标,您需要将您的 UILabel 更改为 UIButton。为了将 TouchUpInside 事件升级到超级视图,您有两种选择: 1-为您的单元格创建一个代表,并在您的超级视图中使用它。 2- 从您的单元格发布通知,并在超级视图中观察(捕捉)它。

祝你好运。 :-)

【讨论】:

以上是关于修复触摸在 UITableViewCell 内的 UILabel 上不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

检测 UITableViewCell 子视图内的触摸

UITableViewCell 内的 UIButton 没有收到点击?

将 UITableViewCell 内的 UITextField 保存到 NSMutableArray

触摸时 UITableViewCell 图像发生变化

如果 UITableViewCell 有多个按钮,那么处理触摸事件的最佳位置在哪里

自定义 `UITableViewCell` 中的 UIImageView 触摸功能