2016-03-24 40 views
0

我想在UITableViewCell的内部放置自定义视图(从nib创建)。这没有问题,除非自定义视图声明它是自己的单一触摸UIPanrecognizer。在这些情况下,我的自定义视图会响应泛事件,但这几乎禁用了滚动表视图内单元格的功能。我试着用单元格和自定义视图注册UIPanRecognizer,但是从iOS 9开始,这种能力似乎不再允许(看起来这也不是苹果想要触摸事件被处理的方式,我在某处阅读触摸事件应该只是由一个视图处理)使用UIPanrecognizer的自定义视图无意中锁定了UITableViewController

我也未能找到一种方式来滚动表格视图以编程方式,这也似乎有点hacky。

当我想要保留UITableView的泛行为,同时仍能够响应自定义视图内的泛事件时,我有什么选择?

我的用例如下:我想重用一个自定义视图,可以横向滚动我创建的应用程序的另一部分。我的表格视图被设置为仅对向下的平底锅作出反应。因此这两个平移操作不会产生干扰。

我现在解决了这个问题的两种方法如下: 横向卷轴反应为双指盘。这是非常尴尬和不直观的。

自定义视图上的所有手势(水龙头除外)都会发送到其超级视图。点击自定义视图将禁用重新路由,这将锁定桌面视图并通过让自定义视图对横向平移作出反应来启用横向滚动。另一个水龙头恢复最初的行为。这很尴尬,因为它要求用户执行三个单独的操作,以便应该只是一个。

我知道我可以为表格视图启用横向平移,但这并不能解决我想要在单元格内重新使用自定义视图的问题。

有没有人知道解决这个困境?

回答

0

解决方案是创建一个自定义UIGestureRecognizer

我跟着this tutorial,创建自定义SidewaysPanGestureRecognizer,注册的,而不是由实施UIGestureRecognizerDelegate方法负责决定如果视图应该处理的姿态通过了所有的手势,但SidewaysPanGestureRecognizer到上海华:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, 
    shouldReceiveTouch touch: UITouch) -> Bool { 
    return gestureRecognizer is SidewaysPanGestureRecognizer 
} 
相关问题