【问题标题】:UICollectionView inside of a Container View - Refresh on button click容器视图内的 UICollectionView - 单击按钮时刷新
【发布时间】:2023-03-10 02:40:01
【问题描述】:

问题

如图所示,我有一个容器视图 (B),它位于一个带有其他控件的视图内 (A)。容器视图 (B) 包含一个集合视图,每当在视图 (A) 上按下按钮时,我都会更新它。

我已经浏览了UICollectionView Basics,但我觉得我一定错过了一些东西。当想要在 UIViewControllers 之间进行通信时,我的自然反应是开始并基于回调或其他委托机制构建一些东西。在我重新发明轮子之前,有什么想法吗?

目前,当我单击视图中的按钮时,我的集合数据会更新,我会在集合视图上调用 setNeedsDisplay 和 reloadData(通过 childViewControllers 属性访问)。我也尝试在容器视图本身上调用 setNeedsDisplay(不高兴)。

顺便说一句 - 我已经查看了类似的 SO 问题,这些问题没有提供匹配的用例,但似乎表明对这种特定类型的问题缺乏洞察力(如果我错过了一个很好的答案,请告诉我) :

ABCD

解决方案

请注意,我已在下面分享了我的解决方案,但仍然欢迎提供其他答案(尤其是如果它是更好的方法)

【问题讨论】:

    标签: ios7 uicollectionview uicontainerview


    【解决方案1】:

    解决方案

    由于我对社区的搜索显示了有关此主题的边缘信息,因此我正在分享我的解决方案。我在我的数据控制器上添加了一个回调函数。然后在仔细检查How to tell UICollectionView about your content 后,我意识到我可以简单地切换数据源,如下所示(所以我将两者结合起来):

    请注意关于如何让 UICollectionView 自行更新的多个选项。

    详情

    在我的数据控制器的 .h 文件中

    //@接口上方

    typedef void (^CallbackBlock)();
    

    //在@interface内

    @property (strong, nonatomic) CallbackBlock onDataUpdated;
    

    //在我的数据控制器方法中更改了数据

    [DataManager sharedManager].onDataUpdated(); //singleton, i know...
    

    //替代上面的单例

    __weak DataManager* weakSelf = [[DataManager alloc]init];
    weakSelf.onDataUpdated();
    

    //在我的UIViewController(B)子类中

    @property (strong,nonatomic)DataManager* controller;
    

    //在我看来确实加载了 UIVC (B)

    self.controller = [DataManager sharedManager];
    
    __weak ProgressViewController* weakSelf = self;
    
    self.controller.onDataUpdated = ^(){
        //perform my action
        [weakSelf setData:nil]; //remove existing data
        [weakSelf setData:[self getSomeData]]; //get some new data
        [[weakSelf progressCollectionView]reloadData]; 
        [[weakSelf progressCollectionView] setNeedsDisplay];
    };
    

    最终结果:

    1. UIVC (A) 收到按钮点击
    2. 数据管理器类在步骤 1 的方法执行结束时触发数据更新事件
    3. UIVC (B) 立即重新加载数据而不刷新 UIVC (A) 的其他子视图

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      相关资源
      最近更新 更多