gpt4 book ai didi

ios - 为 collectionview 重新加载数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:36:47 25 4
gpt4 key购买 nike

我有 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:^{}];
}

最佳答案

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

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

// 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)secondVcDidChangeTheSticker:(SecondVc *)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 做它必须做的委托(delegate):

// 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)方法。在这里,您通过重新加载 TableView 来完成第二个 vc 想要的工作

- (void) secondVcDidChangeTheSticker:(SecondVc *)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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com