2010-09-17 80 views
9

我有横向UIScrollView这是从UIScrollView延伸和我加UIButtons水平。我只能滚动出按钮区域,但如果我想滚动任何按钮是火灾UIControlEventTouchUpInside事件。我不想要这个。如果我点击并且想滚动,如果我滚动,我想点击UIControlEventTouchUpInside动作。从uibutton传递滚动事件到uiscrollview

凭什么我通过滚动事件从UIButtonUIScrollView

+0

,如果你创建了一个简单的代码示例来说明你在做什么,因为在添加一个UIButton到的UIScrollView的简单的情况下,你甚至可以拖动滚动视图现在的位置,如果你在开始触摸事件这将有助于按钮。 – Yetanotherjosh 2011-04-12 08:57:30

回答

0

如果你继承NSButton,使您的这种类型的按钮,并覆盖在你的子类下面你可以传递事件回父视图,你的情况滚动视图

下会使按钮永远触发事件,而是全部将被父视图处理:

- (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]; 
+0

我试过了,但没有奏效。原因是UIScrollView不响应touchesBegan,touchesMoved和touchesEnded事件。我将UIScrollView分类以确认它正在接收这些事件,但没有对它们做任何事情。作为替代通过触摸事件,你可以算出touchesMoved的位置变化而改变滚动视图contentOffset财产,但不给你任何正常的滚动行为的平滑运动或惯性。 – arlomedia 2011-07-27 21:21:07

3

该功能已经内置的。当你有一个UIControl元素作为滚动视图的子视图和触摸事件被检测到时,它最初传递给UIScrollView的。如果在一两秒之后触摸事件中没有足够的移动,它会传递给按钮。

+0

我想我的按钮漂浮在一个固定的位置,滚动内容上面,而不是与内容移动,好像他们是滚动视图的子视图他们会做。但是我无法使用任何其他方法正确流动触摸事件,所以我尝试了这种方法,并将所有按钮分组到一个视图中,该视图是滚动视图的子视图。当scrollViewDidScroll委托方法检测到滚动内容时,通过设置其frame.origin.x以匹配滚动视图的contentOffset.x,我将该视图保留在可见内容的上方。这样可行! – arlomedia 2011-07-28 00:25:35

0

试试这个:

self.button.exclusiveTouch = YES 

工作就像一个魅力对我来说!

4

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

+0

非常感谢! :] – Jerome 2016-10-12 23:49:11