1

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

   scrollView.scrollEnabled = YES;

财产。我该如何处理?

我试图拦截

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

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

4

2 回答 2

0

你很接近试试这个:

-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{  
   if(mycondition)
      [scrollView setContentOffset:scrollView.contentOffset animated:YES];    
}

如果 mycondition 为真,这应该会停止滚动。

于 2013-02-28T16:40:27.447 回答
0

我有一种笨拙的方法来做这可能会或可能不会帮助你。

您尝试使用scrollViewWillBeginDecelerating:做某事没有奏效,因为该方法只是给您消息,而不是请求许可(返回无效)。

相反,您可以实现scrollViewDidScroll:,这也不需要请求许可,但在该方法中,您可以通过设置contentOffset值来防止滚动发生,这样滚动视图实际上不会移动。要完成这项工作,您必须在其他地方检测到您不想滚动并保存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 仍在尝试滚动并且具有动量。然而,在我对这段代码的测试中,我没有看到任何明显的滚动。

希望这可以帮助。

于 2013-02-28T16:46:54.423 回答