我在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中的变化以及他们如何解决这个问题。感谢
答案 0 :(得分:0)
所以我能够通过一些相当讨厌的东西解决这个问题
我的UIControl子类具有 controlStartedTracking 和 controlStoppedTracking 的协议方法。在controlStatedTracking中,我设置了myScrollViewRefernce.scrollEnabled = FALSE;并在controlStoppedTracking我重新启用它myScrollViewRefernce.scrollEnabled
如果有人有更好的事情,请告诉我