为什么UITableView调用UIScrollView的委托方法?
我有一个应用程序,其中我有一个UITableView
一个UIView
,这又是一个UIScrollView
内内,所以层级变成这样:为什么UITableView调用UIScrollView的委托方法?
UIScrollView
- >UIView
- >UITableView
内部数据我UITableView
填写正确。
现在,我的问题是,当我滚动我的UITableView
时,代理方法scrollViewDidEndDecelerating:
和scrollViewDidEndDragging::
被调用。
我不想要这种行为,应该怎么做才能阻止这种行为?
任何一个请帮助, 预先感谢!
UITableViewDelegate扩展了UIScrollViewDelegate。因此调用委托方法。
阻止这个你可以设置tableView.tag = 1000;
当你的页头和的tableView在UIScrollViewDelegate方法(scrollViewDidEndDecelerating: and scrollViewDidEndDragging::
)添加这个在很begining:
if(scrollView.tag == 1000)
return;
...或者将一个指向表格视图的指针保存为一个ivar并与之相比较。 – 2012-07-10 12:02:37
为真。我使用标签来最小化指针的使用。不是我害怕他们,但IMO使用autorelease和标签使得代码不易受内存泄漏的影响。 – George 2012-07-10 13:07:52
我使用指针是因为标签可能不是唯一的非理性担心!哑在这种情况下,我知道... – 2012-07-10 13:39:13
因为UITableView的UIScrollView的从继承。因此它显示了UIScrollView的所有属性和行为。如果你不想要这个,那么请做一件事。
假设您的页面中有另一个滚动视图。
viewDidLoad
或XIB
(如果你在XIB中有你的tableview),为你的tableview设置一个标签。
代码,
self.objYourTableView.tag = 101;
然后在滚动视图代表
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
if(!(scrollView.tag == 101))
{
// Go for your code to run.
}
}
所以你的代码将跳过如果通过表视图调用。其他情况下,它是完美的。希望这会帮助你。
'因为UITableView继承自UIScrollView'。不是。因为'因为UITableViewDelegate从UIScrollViewDelegate继承'。 – George 2012-07-10 13:09:01
如果我正确理解你,你有2个滚动视图,因为UITable已经坐在滚动视图上。这可能会导致问题。 – geminiCoder 2012-07-10 10:13:56
不,我已经保留[parentScroll setScrollEnabled:NO] ...所以这不是问题... – 2012-07-10 10:16:34
确定在这种情况下,我明白为什么这会混淆,让我想一想 – geminiCoder 2012-07-10 10:21:28