UITableView 在水平滚动后不会响应点击
Posted
技术标签:
【中文标题】UITableView 在水平滚动后不会响应点击【英文标题】:UITableView will not respond tap after scroll horizontally 【发布时间】:2015-11-18 08:57:26 【问题描述】:我有一个嵌入在 ViewController 根视图中的 UITableView。这个 UITableView 包含多个列。而且这些列不能在一屏显示,所以我让 UITableView 可以水平滚动。这是使tableview水平滚动的代码:
- (void)viewDidAppear:(BOOL)animated
CGSize size = self.tableView.contentSize;
size.width = 450;
self.tableView.contentSize = size;
[self.tableView layoutIfNeeded];
这很好用,表格可以水平和垂直滚动。在原始屏幕中(没有滚动发生),我可以选择一行,并且可以突出显示选定的行。
我的问题是:如果我将 UITableView 向左滚动一点,并且在滚动之前未显示的区域,则 UITableView 无法响应点击事件。因此,我手指下的行将不会被选中和突出显示。但是如果我在同一区域滑动,我可以滚动。
有人知道我做错了什么吗?感谢您的 cmets 并提前感谢。
【问题讨论】:
【参考方案1】:我了解您的问题,总有一种简单的方法可以解决复杂的问题。您需要的功能可以通过使用UICollectionView 来实现。 在您的 UITableViewCell 添加UICollectionView。在这种方法中,您的代码将变得更清晰,您可以轻松实现您的功能。 这里是关于 UICollectionView 的非常简单的tutorial。 http://www.appcoda.com/ios-programming-uicollectionview-tutorial/
【讨论】:
感谢您的帖子。这样一来,所有的数据都可以显示在屏幕上,不需要横向滚动,对吧?但是对于我的场景,数据必须列在一行中,因为它们是真实的电子表格,例如我教室中学生的考试成绩。 你也可以使用带有分页和collectionview的滚动视图,它会让你的collectionview变成2页 @Tj3n 我会尝试这种方式。但另一方面,你能在我的解决方案中评论这个问题吗?【参考方案2】:最后,我认为这是 UITableView 的一个错误。我通过子类 UITableView 获得了解决该问题的方法。这里是:
// in my own UITableView subclass .m file
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
NSLog(@"MonthDetailTableView: touchesEnded");
UITouch * touch = [touches anyObject];
CGPoint point = [touch locationInView:self];
if (point.x < self.frame.size.width)
[super touchesEnded:touches withEvent:event];
else
// if not adjust by mod, the NSIndexPath returned by indexPathForRowAtPoint
// will be nil. I think this is a bug of UITableView
point.x = (int)point.x % (int)self.frame.size.width;
NSIndexPath *path = [self indexPathForRowAtPoint:point];
[self selectRowAtIndexPath:path animated:NO scrollPosition:UITableViewScrollPositionNone];
if (self.delegate != nil &&
[self.delegate respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)])
[self.delegate tableView:self didSelectRowAtIndexPath:path];
【讨论】:
以上是关于UITableView 在水平滚动后不会响应点击的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView中的UITableView在滚动后没有响应第一次点击