2011-08-04 96 views
4

在我的應用程序,我有兩個並列的tableViews側。當用戶滾動時,我希望第二個人同時滾動,因此它看起來幾乎就像一張有兩個不同列的表格。我在如何去做這件事上有點失落,有什麼建議?iPhone - 如何滾動2個UITableViews對稱

感謝, 格雷格

回答

8

你要考慮的UIScrollViewDelegate - 說你有兩個滾動視圖,一個

使用滾動視圖一個scrollViewDidScroll委託方法來獲得補償,然後在同一個方法調用setContentOffset上滾動視圖,傳遞您從委託獲得的價值。

它實際上不應該超過2-3行的代碼,一旦你建立你的委託方法。

+0

Co OL,我去給一個鏡頭,現在:) – Greg

+0

呀,精美的作品:)謝謝!我會投了,但我沒有15代表處點XD – Greg

+0

的反彈是否正常運作嗎? – Janky

10

便利,UITableView的是的UIScrollView的子類。存在UIScrollViewDelegate,它有以下方法:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

如果實施該方法,你可以得到scrollView參數的contentOffset財產。然後,您應該使用

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated 

並設置新的內容偏移量。因此,像這樣:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    UIScrollView *otherScrollView = (scrollView == self.tableView1) ? self.tableView2 : self.tableView1; 
    [otherScrollView setContentOffset:[scrollView contentOffset] animated:NO]; 
} 

您可以轉換爲一個UITableView,如果你想,但沒有特別的理由這樣做。在scrollViewDidScroll消息,因爲這將讓應用程序陷入無盡的循環:

+0

我會說它在語義上更好地轉換爲UITableView,並且對於可讀性很好。在這種情況下編程方式,這並不重要 –

7

同樣,得到了用戶的滾動tableview中不應發送setContentOffset。所以附加UIScrollViewDelegate方法應該以被實現爲解決該問題:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    beingScrolled_ = nil; 
} 

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{  
    if(beingScrolled_ == nil) 
     beingScrolled_ = scrollView; 
} 

和修改Inspire48的版本scrollViewDidScroll:因此:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    UIScrollView *otherScrollView = (scrollView == self.tableView1) ? self.tableView2 : self.tableView1; 
    if(otherScrollView != beingScrolled) 
    { 
     [otherScrollView setContentOffset:[scrollView contentOffset] animated:NO]; 
    } 
} 

其中beingScrolled_是類型的實例變量的UIScrollView

0
在迅速

對稱滾動兩個uitableviews:

func scrollViewDidScroll(scrollView: UIScrollView) { 
    if tb_time1 == scrollView { 
     tb_time2.contentOffset = tb_time1.contentOffset 
    }else if tb_time2 == scrollView { 
     tb_time1.contentOffset = tb_time2.contentOffset 
    } 
} 
+0

想知道你是否可以幫助我。我有一個tableview裏面的collectionview,並想同步滾動。我將如何做到這一點?我是否必須以某種方式將tableviews委託發送到collectionviews單元,以便它們都依賴相同的'scrollViewDidScroll(_ scrollView:UIScrollView)'? – luke