我有 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-推荐答案 strong>
很难从发布的代码中看出您传递给第二个 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/
|