如何将触摸事件从一个视图传递到另一个视图

Posted

技术标签:

【中文标题】如何将触摸事件从一个视图传递到另一个视图【英文标题】:How to pass touch events from one view to another 【发布时间】:2014-02-07 22:04:30 【问题描述】:

我有一个UIScrollView 和一个UIView 子视图,它有一个UITableView 子视图。我想要的是当用户在UITableView 上滚动时容器滚动视图滚动。有没有办法将孩子UIScrollView的触摸事件传递给容器UIScrollView?谢谢你的帮助。这是滚动视图的代码。父滚动视图在代码中创建,子视图在IB中创建。

CGFloat offset = ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) ? 64.0 : 44.0;
self.parentScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0, offset, 320.0, self.view.frame.size.height - offset)];
self.parentScrollView.delegate = self;
self.parentScrollView.bounces = NO;
self.parentScrollView.contentInset = UIEdgeInsetsMake(self.header.frame.size.height - offset, 0, 0, 0);
self.parentScrollView.delaysContentTouches = NO;
[self.view addSubview:self.parentScrollView];

[self.contentView.tableView registerNib:[UINib nibWithNibName:@"PodcastCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"PodcastCell"];
[self.contentView.tableView registerNib:[UINib nibWithNibName:@"DescriptionCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"DescriptionCell"];
self.contentView.delegate = self;
self.contentView.tableView.delegate = self;
self.contentView.tableView.dataSource = self;
[self.parentScrollView addSubview:self.contentView];
self.parentScrollView.contentSize = CGSizeMake(320.0, self.contentView.frame.size.height);

对不起,我没有很好地解释这一点。我需要父UIScrollView 滚动直到子UITableView 到达父的顶部,此时父UIScrollView 应该停止滚动,而子UItableView 应该开始滚动。这有意义吗?

【问题讨论】:

【参考方案1】:

在您的UITableView 中实现scrollViewDidScroll:,计算contentOffset,然后从您的容器视图中调用setContentOffset:animated:

【讨论】:

以上是关于如何将触摸事件从一个视图传递到另一个视图的主要内容,如果未能解决你的问题,请参考以下文章

仅当触摸类型为手指时,如何将触摸事件传递给其他视图?

将触摸事件传递给 iOS 状态栏

避免将触摸事件传递给后面的背景视图

将触摸事件传递给父视图

将触摸事件传递给多个选项之一

将触摸事件传递给 UICollectionViewCell 内容?