UIScrollView子类改变了iOS7中的行为

时间:2013-11-25 20:43:37

标签: events uiscrollview touch controls

我在UIScrollView子类中有一些自定义UIControl。自定义控件通过检测触摸来改变控件的值来工作,显然在滚动视图中有触敏控件,这可能很奇怪(用户是试图向上和向下滚动还是更改控件的值?)。

所以我覆盖了 touchesShouldBegin:withEvent:inContentView touchesShouldCancelInContentView 方法。在iOS5和iOS6中,如果我将 touchShouldBegin 设置为返回TRUE(意味着触摸事件msg被发送到子视图而不是滚动视图)只有控件工作且滚动视图不会滚动,这很棒。然而在iOS7中有些东西发生了变化(谁会想到),scrollview会滚动,好像没有改变,但同时控件也会收到消息。如果我在控制器上触摸和拖动足够慢,它将起作用,但如果我将手指移动到快速,则scrollview接管并开始滚动。

- (BOOL) touchesShouldBegin: (NSSet *) _touches
              withEvent: (UIEvent *) _event
          inContentView: (UIView *) _view{

self.touch = _touches.anyObject;

if ([_view isKindOfClass: [MyControl class]])
{
    MyControl *control = (MyControl *)_view;
    if ([control touchWasOnTrackButton: _touches.anyObject] ||
        [control touchWasOnInnerButton: _touches.anyObject])
    {
        NSLog(@"CONTROL TOUCHED");
        return YES;
    }
    else
    {
        NSLog(@"TABLEVIEW TOUCHED");
        return NO;
    }
}
else
{
    NSLog(@"TABLEVIEW TOUCHED");
    BOOL touchesShouldBegin = [super touchesShouldBegin: _touches withEvent: _event inContentView: _view];
    return touchesShouldBegin;
}
}

有谁知道iOS7中的变化以及他们如何解决这个问题。感谢

1 个答案:

答案 0 :(得分:0)

所以我能够通过一些相当讨厌的东西解决这个问题

我的UIControl子类具有 controlStartedTracking controlStoppedTracking 的协议方法。在controlStatedTracking中,我设置了myScrollViewRefernce.scrollEnabled = FALSE;并在controlStoppedTracking我重新启用它myScrollViewRefernce.scrollEnabled

如果有人有更好的事情,请告诉我