我已经根据这种技术实现了分页滚动 ( iOS develop. How to extend UIScrollView's scroll event responding area? ) 并且它按预期工作。
我正在滚动的 View 包含几个按钮,我希望不仅能够单击那些居中/分页到 ScrollView 中的按钮,而且还能够单击它左侧和右侧的按钮。我找不到任何方法来解决这个问题,但我还不是真正的 iOS-Jedi,但希望你们中的一个是 :)
因此,正如您从屏幕上看到的那样,UIScrollView 大约是窗口宽度的三分之一,UIScrollView 的内容大小要大得多:大约 1500 像素,并且包含许多以编程方式添加的按钮。这个解决方案最酷的地方,也是实际工作的部分,是按钮: 1) 被分页到 ScrollView 中 2)在 ScrollView 外可见(因为 ScrollView 未选中“剪辑 subview ”) 3)当在 uiscrollview 内可见时,按钮是可点击的。
但是不起作用的是: - 当前位于窗口外部的按钮在单击它们时不会收到“它们的”单击,而是将事件转发到底层(窗口的白色部分) View 。
最佳答案
所以,
我终于设法解决了这个难题,解决方案分为两个 部分。问题是,正如您所记得的那样,点击事件没有传播到 在 UIScrollView 之外(可见)的按钮。事实证明,点击是由底层 View 捕获的,并且可以通过稍微改变关于谁被击中的规则来操纵他们找到目标的方式,从而欺骗事件在你想要的地方通过。不太确定这是否是应该完成的方式,但它解决了我的问题...... :)
1) 第一个必须重写底部 View 中的以下方法 以便它在适当的时候返回 ScrollView 而不是它自己。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *view = [super hitTest:point withEvent:event];
if (view == self)
return [self scrollView];
return view;
}
2) scrollView 必须覆盖两个方法来将点击传递给它包含的对象。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *view = [super hitTest:point withEvent:event];
// Always return us.
return view ;
}
和
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
// We want EVERYTHING!
return YES;
}
非常感谢您的评论和愿意提供帮助。 我呵呵
关于ios - 检测 UIScrollView 之外的点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848960/