如何允许在 UIButtons 上滑动以滚动?
Posted
技术标签:
【中文标题】如何允许在 UIButtons 上滑动以滚动?【英文标题】:How to allow swiping over UIButtons to scroll? 【发布时间】:2014-02-26 23:52:12 【问题描述】:我的应用中有一个 UIButton 轮播菜单。一切都很好,只是按钮有点大,当手指在按钮上拖动时它不会滚动。拖动必须在当前位于旋转木马前面和中心的按钮之外完成。是否有一些设置我可以更改,以便我可以在按钮上滑动以滚动并让它们也可以交互?
这是创建按钮的代码:
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 500.0f, 320.0f);
button.layer.cornerRadius = 8.0f;
button.layer.masksToBounds = NO;
button.layer.borderWidth = 0.0f;
button.layer.shadowColor = [UIColor blackColor].CGColor;
button.layer.shadowOpacity = 0.8;
button.layer.shadowRadius = 12;
button.layer.shadowOffset = CGSizeMake(12.0f, 12.0f);
[button setImage:(UIImage*)[buttons objectAtIndex:index] forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
【问题讨论】:
当手指拖动按钮时,按钮是第一响应者,所以触发按钮动作。如果你想跳过按钮动作,你最好实现自己的touchMoved,touchBegan,touchEnd代码 【参考方案1】:确保UIScrollView
属性canCancelContentTouches
设置为YES
。
scrollView.canCancelContentTouches = YES;
此外,UIScrollView
实现了方法touchesShouldCancelInContentView
。
如果视图不是 UIControl 对象,则默认返回值为 YES; 否则返回 NO。
这意味着UIScrollView
不会尝试取消UIButtons
中的触摸,这会阻止滚动。此外,当内容视图对象为UIButton
时,您可以继承UIScrollView
并覆盖touchesShouldCancelInContentView
以返回YES
。
【讨论】:
我实际上并没有使用 UIScrollView。对困惑感到抱歉。我正在使用此处找到的 iCarousel 类:github.com/nicklockwood/iCarousel 创建轮播效果。以上是关于如何允许在 UIButtons 上滑动以滚动?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIView 中设置滚动视图以向上滑动被键盘隐藏的文本字段?
添加手势识别器以允许在 Swift 中的 MapView 上水平滑动