UIScrollView 中较小的 UIView 以停止触摸
Posted
技术标签:
【中文标题】UIScrollView 中较小的 UIView 以停止触摸【英文标题】:Smaller UIView in UIScrollView to stop touches 【发布时间】:2011-11-11 16:11:55 【问题描述】:我已经阅读了这方面的各种主题,但没有一个能给出我需要的确切解决方案,但它们让我非常接近
我有最顶层的 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 中止或只是触摸那里然后
【问题讨论】:
PS 我有一个奥克曼剃须刀解决方案,它在滑块后面放置一个巨大的按钮,它会吃掉触摸,但这似乎是一种黑客行为,而不是对应用程序进行编码以正确响应触摸 【参考方案1】:在 UISlider 后面放一个透明的 UIButton。该按钮将“吃掉”触摸并阻止滚动。
【讨论】:
嗨格雷格,这就是我所做的...查看我的评论,但我认为应该有适当的方法来做到这一点?【参考方案2】:我的应用也遇到了类似的问题。滚动视图包含一个子视图,它包含自己的子视图。当子子视图出现时,滚动视图需要不能滚动。我通过从子视图发布通知并在滚动视图控制器中监听它们来合并通知。我已经在我的线程上发布了所有代码:https://***.com/a/9010117/1007725
我知道你使用隐形按钮技术已经有几个月了,但如果你仍在寻找一种编码方式来完成它,或者其他人发现了这个线程,我想我会分享。如果您需要帮助将我的代码翻译成您的代码,请告诉我,我会尽力而为。
【讨论】:
以上是关于UIScrollView 中较小的 UIView 以停止触摸的主要内容,如果未能解决你的问题,请参考以下文章