• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 为collectionview重新加载数据

[复制链接]
菜鸟教程小白 发表于 2022-12-12 18:33:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有 2 个 View Controller

ViewControllerWithCollectionView (FIRST) 和 ModalViewControllerToEditCellContent (SECOND)

我以模态方式从 FIRST 转到 SECOND。编辑单元格。返回。

关闭 SECOND Controller 后,编辑的单元格在我调用之前不会更新 [收集重载数据];手动某处。

试图把它放在 viewWillAppear:animated: 中,当我检查日志时,它没有被调用(在关闭 SECOND 之后)

我尝试了各种解决方案,但我无法通过(也许我太累了)。我感觉我缺少一些基本的东西。

编辑关闭按钮

- (IBAction)modalViewControllerDismiss  
    {
        self.sticker.text = self.text.text; //using textFields text
        self.sticker.title = self.titleText.text;// title

        //tried this also
        CBSStickerViewController *pvc = (CBSStickerViewController *)self.stickerViewController; 
        //tried passing reference of **FIRST** controller
        [pvc.cv reloadData];//called reloadData
        //nothing

        [self dismissViewControllerAnimated:YES completion:^{}];
    }



Best Answer-推荐答案


很难从发布的代码中看出您传递给第二个 View Controller 的指向第一个 View Controller 的指针有什么问题。您还应该能够在第二个 View Controller 中引用 self.presentingViewController。无论哪种方式,更漂亮的设计是为第一个 View Controller 找到一种方法来了解已进行更改并更新它自己的 View 。

有几种方法,但我会在这里推荐委托(delegate)模式。第二个 View Controller 可以设置为让第一个 View Controller 为其工作,即重新加载表格 View 。这是它在几乎代码中的样子:

// SecondVc.h

@protocol SecondVcDelegate;

@interface SecondVC : UIViewController

@property(weak, nonatomic) id<SecondVcDelegate>delegate;  // this will be an instance of the first vc

// other properties

@end

@protocol SecondVcDelegate <NSObject>

- (void)secondVcDidChangeTheStickerSecondVc *)vc;

@end

现在第二个 vc 使用它来要求第一个 vc 为它工作,但是第二个 vc 对第一个 vc 的实现细节仍然很愚蠢。我们在这里没有引用第一个 vc 的 UITableView 或任何它的 View ,也没有告诉任何表重新加载。

// SecondVc.m

- (IBAction)modalViewControllerDismiss {

    self.sticker.text = self.text.text; //using textFields text
    self.sticker.title = self.titleText.text;// title

    [self.delegate secondVcDidChangeTheSticker:self];
    [self dismissViewControllerAnimated:YES completion:^{}];
}

现在必须做的就是让第一个 vc 做它必须成为代表的事情:

// FirstVc.h

#import "SecondVc.h"

@interface FirstVc :UIViewController <SecondVcDelegate>  // declare itself a delegate

// etc.

// FirstVc.m

// wherever you decide to present the second vc
- (void)presentSecondVc {

    SecondVc *secondVc = // however you do this now, maybe get it from storyboard?
    vc.delegate = self;  // that's the back pointer you were trying to achieve

    [self presentViewController:secondVc animated:YES completion:nil];
}

最后是妙语。实现委托(delegate)方法。在这里,您通过重新加载表格 View 来完成第二个 vc 想要的工作

- (void) secondVcDidChangeTheStickerSecondVc *)vc {

    [self.tableView reloadData];  // i think you might call this "cv", which isn't a terrific name if it's a table view
}

关于ios - 为collectionview重新加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21609126/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap