菜鸟教程小白 发表于 2022-12-12 18:33:46

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&lt;SecondVcDelegate&gt;delegate;// this will be an instance of the first vc

// other properties

@end

@protocol SecondVcDelegate &lt;NSObject&gt;

- (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 &#34;SecondVc.h&#34;

@interface FirstVc :UIViewController &lt;SecondVcDelegate&gt;// 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&#39;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 &#34;cv&#34;, which isn&#39;t a terrific name if it&#39;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]
查看完整版本: ios - 为collectionview重新加载数据