目标 c - 滚动视图内的多个滚动视图
Posted
技术标签:
【中文标题】目标 c - 滚动视图内的多个滚动视图【英文标题】:Objective c - Multiple scrollviews inside a scrollview 【发布时间】:2013-06-07 14:19:06 【问题描述】:所以,我在一个填充整个 ViewController 的滚动视图中获得了 2 个滚动视图。
所以第一个 SV 滚动没有问题,设置了 2 个子 SV 的 contentSize。
不幸的是,我认为它必须与 Autolayout 相关...它打开,如果我将其关闭,1. SV 不会滚动,但子 SV。
知道怎么解决吗?
【问题讨论】:
你的意思是说内部滚动视图不滚动?您是否将 touches 事件传递给下一个响应者? 没错!如何将其传递给下一个响应者?? 【参考方案1】:尝试在自定义 ScrollView
子类中覆盖 hitTest:withEvent:
。下面的代码应该让内部 UIScollView 处理所有的触摸。
@interface MyCustomScrollView : UIScrollView
@end
@implementation MyCustomScrollView
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
UIView* handler = nil;
if ([self pointInside:point withEvent:event])
for (UIView* view in self.subviews)
if ([view isKindOfClass:[UIScrollView class]])
CGPoint subPoint = [self convertPoint:point toView:view];
handler = [view hitTest:subPoint withEvent:event];
if (handler)
break;
if (nil == handler)
handler = [super hitTest:point withEvent:event];
return handler;
@end
注意:可滚动区域内的可滚动子区域会导致糟糕的用户体验。考虑调整内部滚动视图的大小以适应其内容。
【讨论】:
关于实施的附加说明。根据文档,您应该在子视图上检查pointInside:withEvent:
,然后再向它询问hitTest:withEvent:
。但是这是错误的。系统始终只在视图上调用hitTest:withEvent:
,并由视图检查其中是否有触摸点。
ty,我下班后试试看。。我也在考虑外包内部滚动视图。。我会考虑的。。我会尽快回答!
我现在尝试了该代码..它没有解决:/我首先将其设置为子 SV,然后将其设置为外部 SV.. 什么都没有:S 将外包子 SV。但如果你得到另一个,就告诉【参考方案2】:
通常滚动视图会吃掉所有的触摸事件。因此,滚动视图的子视图不会获得触摸事件。要在子视图中启用触摸事件,您可以将触摸事件从滚动视图传递给下一个响应者。
您可以通过覆盖滚动视图子类中的触摸方法来做到这一点。详细的例子说明见here。
【讨论】:
我一到家就会检查! 对不起,但我真的不明白这个例子......它使用了一个建议我不明白的服装 VC..以上是关于目标 c - 滚动视图内的多个滚动视图的主要内容,如果未能解决你的问题,请参考以下文章