2

当第一个组件仍在滚动时,是否可以防止 UIPickerView 中的第二个组件滚动?即让用户一次只滚动一个组件。

如果是,你建议怎么做?

4

2 回答 2

1

可能最简单的方法是使用透明视图覆盖选择器,该视图可以在选择器滚动时基本上丢弃触摸事件。我相信您将需要发明一种算法来确定选择器是否正在滚动 - 例如,您的数据源是否被要求提供有关某些部分的信息。

当您收到此消息:didSelectRow: 时,您就知道滚动已停止。

在透明视图中,您将需要基本上覆盖选择器,并且只让活动段上方的事件通过。我没有特别这样做,但读过其他人这样做。您应该能够在本网站或 iOS 事件的 Apple 文档中找到有关“吃”或“传递”事件的说明。

另外,如果是我,我会在透明视图中添加三个半透明视图,并为每个视图着色一点不同的颜色,这样您就可以确定是否正确分割了叠加层(即每个部分都正确结束您要阻止的段)。

于 2012-08-07T17:34:11.197 回答
0

您将不得不子类化 UIScrollView 并覆盖 touchesShouldBegin 和 touchesShouldCancelInContentView 方法。

然后,您可以有几个选项,最简单的方法是将 bool 变量设置为 false,如果一个正在移动,并且如果该 bool 为 false 返回 true,则在触摸中应该取消。

反正我就是这样做的。

于 2012-08-07T23:42:28.440 回答