使用按钮检测水平滚动UIScrollView上的垂直滚动

时间:2011-02-12 16:25:47

标签: iphone uiscrollview uibutton touch

我有一个水平滚动的UIScrollView。我也把我自己的处理程序在垂直滚动上做了不同的事情。这非常有效,但后来我使用以下代码在UIScrollView上添加了一些按钮:

UIButton *catButton = [UIButton buttonWithType:UIButtonTypeCustom];
[catButton addTarget:self action:@selector(clickCatButton:) forControlEvents: UIControlEventTouchUpInside];

点击时调用按钮的动作:

- (void) clickCatButton:(id) sender 
{
   [NSObject cancelPreviousPerformRequestsWithTarget:self];
}

但我的问题是,由于将按钮放在UIScrollView上,它们会接管管理垂直滚动的代码。

我有点坚持解决这个问题的最佳方法。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

如果你真的想要处理垂直滚动,即使在按钮上发生了拖动,你可能会做的是将UIButton子类化并将触摸事件转发给下一个响应者(在本例中是滚动视图)。在您的UIButton子类中,覆盖事件处理方法(touchesBegan ...等)以调用超类实现(UIButton),然后将事件转发给下一个响应者,例如:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {  
    [super touchesBegan:touches withEvent:event];
    [self.nextResponder touchesBegan:touches withEvent:event]; 
}

但要小心并考虑按钮的事件处理和垂直滚动处理可能发生的所有情况。例如,如果拖动穿过一个按钮(好吧,虽然如果垂直滚动正常工作就不会发生),那么按钮认为它是按钮上的有效“按下”,它将触发一个动作消息。