2012-07-10 14 views
7

私はUIScrollViewの内側に再びUIView、内部UITableViewを持っている、アプリケーションを持っているので、階層は次のように次のようになります。なぜUITableViewはUIScrollViewのデリゲートメソッドを呼び出しますか?

UIScrollView - 私の内部のデータを>UITableView

- >UIViewUITableViewが正しく埋められています。

私の問題は、UITableViewをスクロールすると、代理メソッドscrollViewDidEndDecelerating:scrollViewDidEndDragging::が呼び出されます。

この動作をしたくない場合、この動作を停止するにはどうすればよいですか。

いずれかお手伝いください、 ありがとうございます!!!

+0

私が正しく理解していれば、スクロールビューにはすでにUITableが置かれているため、2つのスクロールビューがあります。これが原因の可能性があります。 – geminiCoder

+0

いいえ、私は[parentScroll setScrollEnabled:NO]を保持しています...だから問題ではありません... –

+0

OKこの場合、なぜこれが混乱していると思うのか考えてみましょう。 – geminiCoder

答えて

8

UITableViewDelegateはUIScrollViewDelegateを拡張しています。したがって、デリゲートメソッドの呼び出し。 UITableViewはUIScrollViewのを継承しているので

if(scrollView.tag == 1000) 
    return; 
+1

...またはテーブルビューへのポインタをivarとして保持し、それを比較してください。 –

+0

私は、ポインタの使用を最小限に抑えるためにタグを使用します。私はそれらを恐れているわけではありませんが、IMOはオートリリースとタグを利用しているため、コードのメモリリークに対する脆弱性は低くなります。 – George

+0

タグがユニークでないかもしれないという非合理的な恐怖のために私はポインタを使用します!この場合のダムは、私が知っている... –

3

:このあなたがのtableViewをALLOCときtableView.tag = 1000;を設定し、UIScrollViewDelegate法(scrollViewDidEndDecelerating: and scrollViewDidEndDragging::)に非常に初めにこれを追加することができます停止する

。 UIScrollViewのすべてのプロパティと動作を表示します。あなたがこれを望んでいなければ、一つのことをしてください。

あなたのページに別のスクロールビューがあるとします。

viewDidLoadまたはXIB(XIBでテーブルビューを使用している場合)は、テーブルビューのタグを設定します。コード内

self.objYourTableView.tag = 101; 

その後、スクロールビューのデリゲートで

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView 
    { 
     if(!(scrollView.tag == 101)) 
     { 
      // Go for your code to run. 
     } 
    } 

それがテーブルビューで呼び出された場合、あなたのコードはスキップされますように。他のケースは完璧に動作します。これがあなたを助けることを願っています。

+1

'UITableViewはUIScrollViewから継承するためです。 UITableViewDelegateはUIScrollViewDelegateから継承するためです。 – George

関連する問題