ios - 为collectionview重新加载数据
<p><p>我有 2 个 ViewController </p>
<p>ViewControllerWithCollectionView (<strong>FIRST</strong>) 和 ModalViewControllerToEditCellContent (<strong>SECOND</strong>)</p>
<p>我以模态方式从 <strong>FIRST</strong> 转到 <strong>SECOND</strong>。编辑单元格。返回。</p>
<p>关闭 <strong>SECOND</strong>Controller 后,编辑的单元格在我调用之前不会更新
[收集重载数据];手动某处。</p>
<p>试图把它放在 viewWillAppear:animated: 中,当我检查日志时,它没有被调用(在关闭 <strong>SECOND</strong> 之后)</p>
<p>我尝试了各种解决方案,但我无法通过(也许我太累了)。我感觉我缺少一些基本的东西。</p>
<p><strong>编辑</strong>关闭按钮</p>
<pre><code>- (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
;//called reloadData
//nothing
;
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>很难从发布的代码中看出您传递给第二个 ViewController 的指向第一个 ViewController 的指针有什么问题。您还应该能够在第二个 ViewController 中引用 <code>self.presentingViewController</code>。无论哪种方式,更漂亮的设计是为第一个 ViewController 找到一种方法来了解已进行更改并更新它自己的 View 。</p>
<p>有几种方法,但我会在这里推荐委托(delegate)模式。第二个 ViewController 可以设置为让第一个 ViewController 为其工作,即重新加载表格 View 。这是它在几乎代码中的样子:</p>
<pre><code>// 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
</code></pre>
<p>现在第二个 vc 使用它来要求第一个 vc 为它工作,但是第二个 vc 对第一个 vc 的实现细节仍然很愚蠢。我们在这里没有引用第一个 vc 的 UITableView 或任何它的 View ,也没有告诉任何表重新加载。</p>
<pre><code>// SecondVc.m
- (IBAction)modalViewControllerDismiss {
self.sticker.text = self.text.text; //using textFields text
self.sticker.title = self.titleText.text;// title
;
;
}
</code></pre>
<p>现在必须做的就是让第一个 vc 做它必须成为代表的事情:</p>
<pre><code>// 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
;
}
</code></pre>
<p>最后是妙语。实现委托(delegate)方法。在这里,您通过重新加载表格 View 来完成第二个 vc 想要的工作</p>
<pre><code>- (void) secondVcDidChangeTheSticker:(SecondVc *)vc {
;// i think you might call this "cv", which isn't a terrific name if it's a table view
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - 为collectionview重新加载数据,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/21609126/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/21609126/
</a>
</p>
页:
[1]