当 UIScrollView 内容改变时更新 UITableView

Posted

技术标签:

【中文标题】当 UIScrollView 内容改变时更新 UITableView【英文标题】:Update UITableView when UIScrollView content changes 【发布时间】:2014-09-20 13:37:20 【问题描述】:

我有 2 个 ViewController,每个都包含一个滚动视图(显示多个图表)和一个表格视图。 我想根据滚动视图中显示的当前图形更新表格视图内容。

滚动视图由一个单独的类“GraphScrollView”管理,其中 currentIndex 属性存储当前显示的图形。

问题是我不知道如何通知viewController currentIndex 发生了变化,以便它可以发送reloadData 方法来更新tableview。 我正在考虑在 GraphScrollView 类中发布通知并在 2 个 viewControllers 中添加一个观察者,但在这种情况下,两个 ViewControllers 都会被通知,而我只想通知当前活动视图的 viewController(因为两个 VC 应该是独立,还因为 2 个 viewController 可能有不同数量的图,因此 currentIndex 可能是两个 VC 之一的错误值。

谢谢, 科拉多

【问题讨论】:

【参考方案1】:

我假设您可以在“活动视图”更改时将视图控制器设置为观察者并删除。

您也可以创建一个委托协议并切换哪个视图控制器是委托,但我实际上发现这比通知更工作,没有特别的收获。

【讨论】:

【参考方案2】:

您的问题不清楚如何在滚动视图中更改currentIndex。但是您始终可以在视图控制器中实现 UIScrollViewDelegate 以在滚动结束时获取更新:

...
@implementation ViewController 
...
- (void)viewDidLoad 
   ...
   self.graphScrollView.delegate = self;
   ... 



...
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

   if (self.graphScrollView.currentIndex == ???) 
       [self.tableView reloadData];
   

...

【讨论】:

以上是关于当 UIScrollView 内容改变时更新 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 uiscrollview 滚动 uiwebview

iOS开发UI篇—UIScrollView控件介绍

iOS开发UI篇—UIScrollView控件介绍

UIScrollView 放大时用 1 根手指平移

Swift:以编程方式添加视图时,UIScrollView 的可滚动内容大小不明确,而不使用 IB

基于设备旋转更新变量 - Swift UI