Iphone 将滚动事件从uibutton传递到uiscrollview

Iphone 将滚动事件从uibutton传递到uiscrollview,iphone,scroll,uiscrollview,uibutton,Iphone,Scroll,Uiscrollview,Uibutton,我有水平UIScrollView,它是从UIScrollView扩展而来的,我水平添加了UIButtons。我只能滚动出按钮区域,但如果我想滚动任何按钮,请单击firesUIControlEventTouchUpInsideevent。我不要这个。如果单击,我想触发UIControlEventTouchUpInside操作,如果滚动,我想滚动 因此,我如何将scroll事件从UIButton传递到UIScrollView?如果您将NSButton子类化,并将按钮设置为该类型,并在子类中覆盖以下内

我有水平
UIScrollView
,它是从
UIScrollView
扩展而来的,我水平添加了
UIButtons
。我只能滚动出按钮区域,但如果我想滚动任何按钮,请单击fires
UIControlEventTouchUpInside
event。我不要这个。如果单击,我想触发
UIControlEventTouchUpInside
操作,如果滚动,我想滚动


因此,我如何将scroll事件从
UIButton
传递到
UIScrollView

如果您将NSButton子类化,并将按钮设置为该类型,并在子类中覆盖以下内容,则您可以将事件传递回父视图,在您的情况下为scroll视图

以下情况将使按钮从不触发事件,而是由父视图处理所有事件:

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

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

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent*)event 
{
    [self.nextResponder touchesEnded:touches withEvent:event];  
}
如果您想让按钮处理其中一个事件,请使用

[super touchesEnded:touches withEvent:event];

该功能已经内置。当您将UIControl元素作为滚动视图的子视图并且检测到触摸事件时,它最初会传递到UIScrollView。如果触摸事件在一两分钟后没有足够的移动,则会传递到按钮。

尝试以下操作:

self.button.exclusiveTouch = YES

对我来说工作很有魅力

子类UIScrollView,在
-touchesShouldCancelInContentView:
方法中返回YES。

如果您创建一个简单的代码示例来说明您正在做什么,这会有所帮助,因为在向UIScrollView添加UIButton的简单情况下,即使你在按钮上启动了触摸事件,你也可以拖动滚动视图位置。我试过了,但没有成功。原因是UIScrollView不响应ToucheSBegind、touchesMoved和touchesEnded事件。我将UIScrollView子类化,以确认它正在接收这些事件,但没有对它们做任何处理。作为传递触摸事件的替代方法,您可以计算TouchsMoved中的位置变化并更改滚动视图的contentOffset属性,但这并没有给您正常滚动行为的任何平滑移动或惯性。我希望我的按钮在滚动内容上方的固定位置浮动,而不是像滚动视图的子视图那样随内容移动。但我无法用任何其他方法使触摸事件正常运行,因此我尝试了这种方法,并将所有按钮组合到一个视图中,该视图是滚动视图的子视图。我通过设置frame.origin.x以匹配滚动视图的contentOffset.x(每当滚动内容时),将该视图保持在可见内容之上,正如scrollViewDidScroll委托方法检测到的那样。真管用!非常感谢!:]