2

我已经阅读了这方面的各种主题,但没有一个能给我我需要的确切解决方案,但它们让我非常接近

我有最顶层的 UIViewController,其中包含一个分页 UIScrollingView(通过 xib 创建)

UIScrollingView 加载一个虚拟视图控制器数组,当用户在页面中滑动时,这些视图控制器将交换为各种视图控制器。

其中一个子视图包含一堆滑块——常见的问题:如果用户稍微错过了一个滑块,他们就会滚动页面。

在子视图中,我在部分覆盖屏幕的滑块后面放置了一个 UIView:'uiviewblocker'

这个想法是这个“uiviewblocker”会吃掉滑块周围直接区域的任何触摸,但在 uiview 之外的滑动由父 UIViewController 处理。我将 UIView 'uiviewblocker' 子类化为重复的 UIViewController 'MyView',以便我可以检测到它。

我已经到...

父 UIScrollView:

scrollView.delaysContentTouches = NO;

子视图 UIViewController

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
    NSLog(@"touchesBegan");
    //[self.nextResponder touchesBegan: touches withEvent:event];   


    UIView *touchView = [[touches anyObject] view];
    if ([touchView isKindOfClass:[MyView class]]) {
         NSLog(@"funky shit");

        [super touchesBegan:touches withEvent:event];

        //[self.delegate touchesBegan:touches withEvent:event];

        //[self touchesBegain:touches withEvent:event];   // View does not respond: crashes

        //UIView *parent = self.view.superview;
        //[parent setCanCancelContentTouches:YES]; // UIView does not respond

        //UIScrollView * parentScrollView = (UIScrollView*)self.superview; // Superview not in structure

    } else {
        NSLog(@"normal shit");
    }
}

所以现在我可以通过测试它的类'MyView'来检测用户何时触摸安全区域UIview,但我无法弄清楚如何告诉父UIScrollView中止或只是触摸那里然后

4

2 回答 2

1

在 UISlider 后面放一个透明的 UIButton。该按钮将“吃掉”触摸并防止滚动。

于 2011-11-11T21:02:56.473 回答
0

我的应用程序也有类似的问题。滚动视图包含一个子视图,它包含自己的子视图。当子子视图出现时,滚动视图需要不能滚动。我通过从子视图发布通知并在滚动视图控制器中监听它们来合并通知。我已经在我的线程上发布了所有代码:https ://stackoverflow.com/a/9010117/1007725

我知道你使用隐形按钮技术已经有几个月了,但如果你仍在寻找一种编码方式来完成它,或者其他人找到这个线程,我想我会分享。如果您需要帮助将我的代码翻译成您的代码,请告诉我,我会尽力而为。

于 2012-03-09T02:02:17.393 回答