2011-08-04 9 views
4

私のアプリでは、2つのtableViewを並べて表示します。ユーザーがスクロールすると、2つ目のスクロールが同時に行われるので、2つの異なる列を持つ1つの表のように見えます。私はこれをやっていく方法について少し迷っています。iPhone - 2つのUITableViewを対称にスクロールする方法

おかげで、 グレッグ

答えて

8

あなたはUIScrollViewDelegateに見たいと思うでしょう - あなたは2つのスクロールビュー、Bを持っていると言います。

あなたは、デリゲートから取得した値を渡して、スクロールビュー Bに同じメソッド呼び出し setContentOffsetで、その後オフセットを取得するには、スクロールビュー scrollViewDidScrollデリゲートメソッドを使用し、。

デリゲートメソッドを設定した後は、実際には2〜3行のコードにしないでください。

+0

Co ol、私はすぐにそのショットを与える行く:) – Greg

+0

ええ、美しく働く:)ありがとう!私は投票するだろうが、私は15ポイントを持っていないXD – Greg

+0

バウンスはあなたに正しく働く? – Janky

10

便宜上、UITableViewはUIScrollViewのサブクラスです。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

あなたがそのメソッドを実装する場合、あなたはscrollView引数のcontentOffsetプロパティを取得することができます:このメソッドを持っているUIScrollViewDelegateが、存在します。次に、

- (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にキャストすることができますが、そうする特別な理由はありません。

+0

私はその意味的にUITableViewとしてキャストするほうがいいと思います。プログラム的にこの場合は、それは問題ではありません –

7

また、ユーザがスクロールしたテーブルビューは、無制限のサイクルに入るので、scrollViewDidScrollのsetContentOffset:メッセージを送信しないようにしてください。したがって:Inspire48のバージョンscrollViewDidScroll変更

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

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

と:ので、追加UIScrollViewDelegate方法が問題を解決するために実施されるべきであるbeingScrolled_タイプのIVAR迅速にUIScrollViewの

0

ある

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

対称的に2つの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を持っていて、スクロールを同期したい。どうすればいい?私は何らかの方法でcol​​lectionviewsセルにtableviewsデリゲートを送信しなければならないので、両方が同じ 'scrollViewDidScroll(_ scrollView:UIScrollView)'に依存していますか? – luke

関連する問題