2012-07-10 49 views
7

我有一个应用程序,其中我有一个UITableView一个UIView,这又是一个UIScrollView内内,所以层级变成这样:为什么UITableView调用UIScrollView的委托方法?

UIScrollView - >UIView - >UITableView

内部数据我UITableView填写正确。

现在,我的问题是,当我滚动我的UITableView时,代理方法scrollViewDidEndDecelerating:scrollViewDidEndDragging::被调用。

我不想要这种行为,应该怎么做才能阻止这种行为?

任何一个请帮助, 预先感谢!

+0

如果我正确理解你,你有2个滚动视图,因为UITable已经坐在滚动视图上。这可能会导致问题。 – geminiCoder 2012-07-10 10:13:56

+0

不,我已经保留[parentScroll setScrollEnabled:NO] ...所以这不是问题... – 2012-07-10 10:16:34

+0

确定在这种情况下,我明白为什么这会混淆,让我想一想 – geminiCoder 2012-07-10 10:21:28

回答

8

UITableViewDelegate扩展了UIScrollViewDelegate。因此调用委托方法。

阻止这个你可以设置tableView.tag = 1000;当你的页头和的tableView在UIScrollViewDelegate方法(scrollViewDidEndDecelerating: and scrollViewDidEndDragging::)添加这个在很begining:

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

...或者将一个指向表格视图的指针保存为一个ivar并与之相比较。 – 2012-07-10 12:02:37

+0

为真。我使用标签来最小化指针的使用。不是我害怕他们,但IMO使用autorelease和标签使得代码不易受内存泄漏的影响。 – George 2012-07-10 13:07:52

+0

我使用指针是因为标签可能不是唯一的非理性担心!哑在这种情况下,我知道... – 2012-07-10 13:39:13

3

因为UITableView的UIScrollView的从继承。因此它显示了UIScrollView的所有属性和行为。如果你不想要这个,那么请做一件事。

假设您的页面中有另一个滚动视图。

viewDidLoadXIB(如果你在XIB中有你的tableview),为你的tableview设置一个标签。

代码,

self.objYourTableView.tag = 101; 

然后在滚动视图代表

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

所以你的代码将跳过如果通过表视图调用。其他情况下,它是完美的。希望这会帮助你。

+1

'因为UITableView继承自UIScrollView'。不是。因为'因为UITableViewDelegate从UIScrollViewDelegate继承'。 – George 2012-07-10 13:09:01

相关问题