2013-02-28 100 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:將被調用多次的每次嘗試,因爲滾動視圖滾動仍試圖滾動和有氣勢。然而,在我對這段代碼的測試中,我沒有看到任何明顯的滾動。

希望這會有所幫助。

相關問題