I have an application, in which I have a UITableView
inside a UIView
, which is again inside a UIScrollView
, so the hierarchy becomes like this:
我有一个应用程序,其中我在UIView中有一个UITableView,它再次位于UIScrollView中,因此层次结构如下所示:
UIScrollView
-> UIView
-> UITableView
UIScrollView - > UIView - > UITableView
The data inside my UITableView
is filled properly.
我的UITableView中的数据已正确填充。
Now, my problem is that, When I scroll my UITableView
, the UIScrollView's
delegate method scrollViewDidEndDecelerating:
and scrollViewDidEndDragging::
gets called.
现在,我的问题是,当我滚动我的UITableView时,UIScrollView的委托方法scrollViewDidEndDecelerating:和scrollViewDidEndDragging ::被调用。
I don't want this behavior, what should I do to stop this behavior?
我不想要这种行为,我该怎么做才能阻止这种行为?
Any one please Help, Thank in advance!!!
任何人请帮忙,谢谢!
2 个解决方案
#1
8
UITableViewDelegate extends UIScrollViewDelegate. Hence the calling of the delegate methods.
UITableViewDelegate扩展了UIScrollViewDelegate。因此调用委托方法。
To stop this you can set tableView.tag = 1000;
when you alloc the tableView and in the UIScrollViewDelegate methods ( scrollViewDidEndDecelerating: and scrollViewDidEndDragging::
)add this at the very begining:
要停止此操作,您可以设置tableView.tag = 1000;当你分配tableView并在UIScrollViewDelegate方法(scrollViewDidEndDecelerating:和scrollViewDidEndDragging ::)时,在最开始时添加:
if(scrollView.tag == 1000)
return;
#2
3
Because UITableView inherits from UIScrollView. So it shows all the properties and behaviours of UIScrollView. If you dont want this then please do one thing.
因为UITableView继承自UIScrollView。因此它显示了UIScrollView的所有属性和行为。如果你不想要这个,请做一件事。
Assuming you have another scrollview in your page.
假设您的页面中有另一个滚动视图。
in the viewDidLoad
or from the XIB
(if you have your tableview in the XIB), set a tag for your tableview.
在viewDidLoad或XIB中(如果你在XIB中有你的tableview),为你的tableview设置一个标签。
in code,
self.objYourTableView.tag = 101;
then in the scroll view delegate
然后在滚动视图委托中
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
if(!(scrollView.tag == 101))
{
// Go for your code to run.
}
}
So that your code will skip if it called by the table view. Other cases it works perfect. Hope this will help you.
因此,如果表视图调用了代码,那么代码将跳过。其他情况下它完美无缺。希望这会帮助你。
#1
8
UITableViewDelegate extends UIScrollViewDelegate. Hence the calling of the delegate methods.
UITableViewDelegate扩展了UIScrollViewDelegate。因此调用委托方法。
To stop this you can set tableView.tag = 1000;
when you alloc the tableView and in the UIScrollViewDelegate methods ( scrollViewDidEndDecelerating: and scrollViewDidEndDragging::
)add this at the very begining:
要停止此操作,您可以设置tableView.tag = 1000;当你分配tableView并在UIScrollViewDelegate方法(scrollViewDidEndDecelerating:和scrollViewDidEndDragging ::)时,在最开始时添加:
if(scrollView.tag == 1000)
return;
#2
3
Because UITableView inherits from UIScrollView. So it shows all the properties and behaviours of UIScrollView. If you dont want this then please do one thing.
因为UITableView继承自UIScrollView。因此它显示了UIScrollView的所有属性和行为。如果你不想要这个,请做一件事。
Assuming you have another scrollview in your page.
假设您的页面中有另一个滚动视图。
in the viewDidLoad
or from the XIB
(if you have your tableview in the XIB), set a tag for your tableview.
在viewDidLoad或XIB中(如果你在XIB中有你的tableview),为你的tableview设置一个标签。
in code,
self.objYourTableView.tag = 101;
then in the scroll view delegate
然后在滚动视图委托中
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
if(!(scrollView.tag == 101))
{
// Go for your code to run.
}
}
So that your code will skip if it called by the table view. Other cases it works perfect. Hope this will help you.
因此,如果表视图调用了代码,那么代码将跳过。其他情况下它完美无缺。希望这会帮助你。