我有一个水平分页UIScrollView
,UIButton
部分覆盖了滚动视图。
像这样:
UIView
|
|- UIScrollView
|
|- UIButton
我想让UIButton
不要触发点按滚动并重新按下按钮(我希望UIScrollView
代替滚动) 。我希望按钮仅响应轻触和释放 - 不移动。
这可以轻松快速地完成吗?或者我应该继承UIButton
并覆盖-touchesBegan:
等,以便在适当时手动将触摸传递给scrollView
?
答案 0 :(得分:0)
好的,试试这个。这会将按钮上的点击识别器设置为等待点击结束,然后测试触摸是否在UIButton中结束。
UIButton * btn;
UITapGestureRecognizer * getTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(methodToPerformOnTap:)];
[btn addGestureRecognizer:getTap];
-(void) methodToPerformOnTap:(UITapGestureRecognizer *)sender {
if ([sender state] == UIGestureRecognizerStateEnded)
{
CGPoint point = [sender locationInView:btn];
if ( CGRectContainsPoint(btn.bounds, point) ) {
// Point lies inside the bounds. HANDLE BUTTON TAP HERE.
}
}
}
答案 1 :(得分:0)
经过一些额外的研究后,我找到了合理的解决方案。这里的问题是UIScrollView
和UIButton
不在同一响应者层次结构中:两者的下一个响应者是父UIView
,所以他们不发送事件到相互默认。
解决方案是子类UIButton
并实现
- (UIResponder *)nextResponder
方法,以便返回UIScrollView
。
另一种解决方案是让UIButton
成为UIScrollView
的孩子。但是,如果您想将按钮保持在固定位置而不管单元格滚动,那么这种方法并不好用。
有点烦人的是,没有更简单的方法可以做到这一点。 : - )