我有一个应用程序,其中包含(以及其他控件)UIScrollview。 在某些时候我需要在scrollview上禁用滚动,但我不想使用
scrollView.scrollEnabled = YES;
属性。我怎么处理这个?
我试图拦截
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
if(mycondition) {
return;
}
当我的条件有效时,代码会返回返回,但滚动仍然会发生。
答案 0 :(得分:0)
你接近试试这个:
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
if(mycondition)
[scrollView setContentOffset:scrollView.contentOffset animated:YES];
}
如果mycondition为true,这应该停止滚动。
答案 1 :(得分:0)
我有一种笨拙的方式来做这件事可能会或可能不会帮助你。
您尝试使用 scrollViewWillBeginDecelerating:执行某些操作无效,因为该方法只是为您提供新闻,而不是请求权限(返回void)。
相反,您可以实现 scrollViewDidScroll:,它也不会要求权限,但在该方法中,您可以通过设置 contentOffset 值来防止滚动发生事实上,scrollview并没有移动。要使其工作,您必须在其他地方检测到您不想滚动并在此时保存 contentOffset 。
// Condition starts. Save the content offset
if (whatever) {
lockedContentOffset = tableView.contentOffset;
}
...
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
if (condition_for_which_i_dont_want_to_scroll) {
scrollView.contentOffset = lockedContentOffset;
NSLog(@"Reset content offset");
}
}
方法 scrollViewDidScroll:将为每次滚动尝试多次调用,因为scrollView仍在尝试滚动并具有动量。但是,在我对此代码的测试中,我没有看到任何明显的滚动。
希望这有帮助。