在我的UIView中,我添加了UIScrollview作为子视图,在UIScrollview中添加了UIButtons。
现在我的问题是我想知道用户是否点击了按钮,但是没有调用UIScrollview的touchesbegin,因为scrollview的所有其他委托方法都工作得很好。
如果我做错了,请告诉我。
答案 0 :(得分:12)
你的问题的文字与标题不符,但是对于那些在touchesShouldBegin:withEvent:inContentView
的子类上没有调用UIScrollView
的人来说,这里的答案是:
如果被触摸的子视图响应触摸事件,则仅调用touchesShouldBegin:withEvent:inContentView
方法。如果用户触摸像UILabel
这样的非交互式子视图,则通常不会调用此方法。您可以通过将子视图的userInteractionEnabled
属性设置为YES来强制对任何给定子视图的触摸进行调用。
还要注意滚动视图的delaysContentTouches
属性的状态。如果它设置为YES,则滚动视图将不会调用touchesShouldBegin:withEvent:inContentView:
直到计时器到期,这表明触摸不太可能是滚动手势。如果您希望立即调用touchesShouldBegin:withEvent:inContentView:
,请将delaysContentTouches
设置为NO。
答案 1 :(得分:1)
如果你只是试图处理按钮上的简单点击,我建议你使用 - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents(有关它的更多信息,请查看UIButton的UIControl),否则我的方式是将UIScrollView子类化,为touches添加一个委托并将它们传递给它,但它很乱,除非需要非常自定义的行为,否则我不会使用它