我知道Stack上有类似的帖子,但我发现的任何内容都没有帮助我找到解决方案。
我已将 UIButton 添加到滚动视图上方的相同UIView 。
我知道如何使用hitTest传递触摸返回滚动视图,但这会阻止任何进入UIButton的内容。
我不想要将UIButton添加到UIScrollView。
有没有人有建议的解决方案?
答案 0 :(得分:1)
试试这个:
实际上,你会欺骗滚动视图,认为该按钮是其子视图之一。我不确定这会起作用,因为我没有真正尝试过,但它似乎完全合情合理。
答案 1 :(得分:1)
尝试向UIPanGestureRecognizer
添加UIBUtton
。在您指定处理平移(拖动)的回调中,您无需实现任何操作。然后,将cancelsTouchesInView
设置为YES。这将使您的按钮将拖动手势传递给其他视图。
UIPanGestureRecognizer *gr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan)]; [gr setCancelsTouchesInView:YES]; [myButton addGestureRecognizer:gr]; [gr release];
这里是handlePan
:
-(void)handlePan { // Do nothing }
我遇到了类似的情况,我有一个UIScrollView
,其中包含两个UIView
个子视图。每个UIView
都包含UISlider
。我想捕捉(并放下)垂直拖动(这是手势识别器进入的位置),但我还需要水平滚动按照您的预期在滑块中工作并向左和向右平移滚动视图。这是解决方案。 (手势识别器附加到每个UIView
。)
答案 2 :(得分:1)
试试这个:子类化UIScrollView,在touchesShouldCancelInContentView:方法中返回YES。
答案 3 :(得分:0)
如this answer中所述,作为滚动视图子视图的UIButton或其他UIControl将自动响应点击,同时让滚动视图处理拖动。但是,作为滚动视图子视图的按钮也将随滚动内容一起移动,而不是在内容在其下方滚动时保留在屏幕上的相同位置。我假设这就是你不想把按钮放到滚动视图中的原因。
如果是这种情况,您可以再一步获得所需的行为。将所有按钮放入UIView,它是滚动视图的子视图,然后在滚动视图的委托的scrollViewDidScroll方法中,将该视图的frame.origin设置为滚动视图的contentOffset。我刚刚在我的应用程序中实现了它,它工作得很好,无需进行任何子类化或参与响应链或触摸事件。