2013-02-28 75 views
1

我有一个应用程序,其中包含(其他控件)UIScrollview。 在某些时候我需要禁用滚动的滚动视图,但我不希望使用禁用滚动视图不锁定用户界面

scrollView.scrollEnabled = YES; 

财产。我该如何处理?

我试图拦截

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

,当我的条件是有效的代码打回,但滚动仍会发生。

+0

“因为它锁定了UI” - 你是什么意思?它只锁定滚动视图,以便它不滚动 - 是不是你想要的? – foundry 2013-02-28 16:09:38

+0

不,它会锁定我想要的那个滚动视图上的接触,但要有条件地禁用滚动。 – Huang 2013-02-28 16:14:21

+0

接触子视图仍然有效,你试图拿起什么接触? – foundry 2013-02-28 16:34:31

回答

0

你被关闭试试这个:

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

这应该停止滚动,如果mycondition是真实的。

+0

cool fix dude,我正在做的是[scrollView setContentOffset:CGPointMake(0,0)animated:YES]; – Huang 2013-02-28 17:00:35

0

我有一种很笨拙的方式来做到这一点,它可能会或可能不会帮助你。

您尝试使用scrollViewWillBeginDecelerating:做一些事情没有奏效,因为该方法只是为您提供新闻,而不是要求获得许可(返回void)。

相反,你可以实现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:将被调用多次的每次尝试,因为滚动视图滚动仍试图滚动和有气势。然而,在我对这段代码的测试中,我没有看到任何明显的滚动。

希望这会有所帮助。

相关问题