在不锁定UI的情况下禁用scrollview

时间:2013-02-28 15:50:26

标签: ios xcode uiscrollview

我有一个应用程序,其中包含(以及其他控件)UIScrollview。 在某些时候我需要在scrollview上禁用滚动,但我不想使用

   scrollView.scrollEnabled = YES;

属性。我怎么处理这个?

我试图拦截

    -(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
    { 
    if(mycondition) {
      return;
    }

当我的条件有效时,代码会返回返回,但滚动仍然会发生。

2 个答案:

答案 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仍在尝试滚动并具有动量。但是,在我对此代码的测试中,我没有看到任何明显的滚动。

希望这有帮助。