点击时UIScrollView内的UIButton延迟

时间:2016-05-12 02:42:23

标签: ios swift uiscrollview uibutton touchescancelled

我是使用swift的新手,我在创建它时遇到了问题

我正在使用swift 2 XCode 7

我在scrollview底部有一个按钮,用于提交我放在上面的所有文本字段,但是当我点击按钮时,我必须按住按钮几秒钟才能点击按钮。我在一些网络中搜索了一个解决方案并且有一个解决方案说取消选中Delays Content Touches,但我的滚动视图变得太难以滚动所以我检查了另一个解决方案说创建一个自定义ScrollView,但在我创建它之后,我无法点按我的按钮。

这是我找到的几个网络,但没有人工作

UIButton touch is delayed when in UIScrollView

UIButton not showing highlight on tap in iOS7 - Swift

Subclass UIScrollView in Swift for touches Began & touches Moved

请给我一些如何解决此问题的示例

感谢任何帮助

2 个答案:

答案 0 :(得分:0)

解决它的最佳方法是分离按钮和滚动视图框。操作系统不会检查触摸事件是针对按钮还是滚动视图。

<强>更新

我想知道你的按钮是滚动视图的子视图。因为我测试了此视图层次结构并且没有解决您的问题:

enter image description here

更新2: 你也可以这样做。同时,只要滚动视图滚动,就应该移动该按钮。这看起来就像他们在一起。

另一种解决方案是改变响应链。您可以在- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event UIView中获得热门活动。如果该点位于按钮框中,则应按下测试按钮并返回该结果。像这样:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    if (!self.clipsToBounds && !self.hidden && self.alpha > 0.01) {
        CGPoint point = [button convertPoint:point fromView:scrollView];
        if (button frame contains point) {
            UIView *result = [button hitTest:point withEvent:event];
            if (result != nil) {
                return result;
            }
        } else {
            // hit the scroll view area outside button
        }
    }

    return nil;
}

答案 1 :(得分:-1)

如果按钮位于tableview的底部,则始终可以添加一个行,其中一个单元格充当按钮。或者将按钮添加到tableview页脚。