使用UIPanrecognizer的自定义视图无意中锁定UITableViewController

时间:2016-03-24 00:46:00

标签: swift uitableview nib uipangesturerecognizer ibdesignable

我想在UITableViewCell s中放置自定义视图(从nib创建)。这没有问题,除非自定义视图声明它自己的单触UIPanrecognizer。在这些情况下,我的自定义视图会响应pan事件,但这几乎会禁用滚动表视图中的单元格的功能。我尝试使用单元格和自定义视图注册UIPanRecognizer,但是自IOS 9以来似乎不再允许这种能力(似乎这也不是Apple想要触摸事件的处理方式,我在某处读到触摸事件应该只是由一个视图处理)

我也没能找到一种以编程方式滚动表格视图的方法,这看起来有点像hacky。

当我想要保留UITableView的平移行为同时仍然能够响应自定义视图中的平移事件时,我有哪些选择?

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

我目前解决的两种方法如下: 横向滚动会对双指平移做出反应。这是非常尴尬和不直观的。

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

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

有没有人知道这种困境的解决方案?

1 个答案:

答案 0 :(得分:0)

解决方案是创建自定义UIGestureRecognizer

我关注this tutorial,创建了一个自定义SidewaysPanGestureRecognizer,通过实施负责决定是否为SidewaysPanGestureRecognizer方法的UIGestureRecognizerDelegate方法,将所有手势通过func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { return gestureRecognizer is SidewaysPanGestureRecognizer } 注册到超级视图视图应该处理手势:

```{r, echo=TRUE}
f1$fpevals
```