为什么UITableView调用UIScrollView的委托方法?

时间:2021-02-14 21:04:35

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.

因此,如果表视图调用了代码,那么代码将跳过。其他情况下它完美无缺。希望这会帮助你。