修复触摸在 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];
表格视图中的The
UILabel` 对触摸没有响应,尽管触摸仅在单元格的空白区域中起作用。
验证所有连接、约束和类。
【问题讨论】:
默认不启用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 内的 UIButton 没有收到点击?
将 UITableViewCell 内的 UITextField 保存到 NSMutableArray