菜鸟教程小白 发表于 2022-12-12 16:16:10

ios - UICollectionView 子类可在多个 viewController 中重用


                                            <p><p>我想创建一个自包含的 <code>UICollectionView</code> 子类(充当它自己的数据源和委托(delegate)),以便我可以将它加载到不同的 ViewController 中。到目前为止,这是我所拥有的:</p>

<p><strong>CustomCollectionView.h</strong></p>

<pre><code>@interface CustomCollectionView : UICollectionView &lt;UICollectionViewDataSource, UICollectionViewDelegate&gt;

@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;

@end
</code></pre>

<p><strong>CustomCollectionView.m</strong></p>

<pre><code>#import &#34;SSCalendarView.h&#34;

@implementation SSCalendarView
@synthesize collectionView;

- (id)initWithFrame:(CGRect)frame {

    self = ;

    if (self) {

      [ loadNibNamed:NSStringFromClass() owner:self options:nil];

       forCellWithReuseIdentifier:@&#34;Identifier&#34;];

      ;
    }
    return self;
}

// Below are UICollectionViewDataSource and UICollectionViewDelegate methods

@end
</code></pre>

<p><strong>CustomCollectionView.xib</strong></p>

<ul>
<li>仅包含一个 View- <code>UICollectionView</code>。它的类设置为 <code>CustomCollectionView</code></li>
<li>File's Owner 的类也设置为 <code>CustomCollectionView</code></li>
<li>File's Owner 是 <code>UICollectionView</code> 的委托(delegate)和数据源</li>
</ul>

<p>我知道我在这里有很多问题。但也许我们可以以此为起点。</p>

<p>我的问题是:</p>

<ul>
<li>如何正确实现这个子类?我想完全从 xib 加载 View </li>
<li>首先,除了潜在的 MVC 违规(这个子类会做所有事情)之外,UICollectionView 可以作为自己的数据源和委托(delegate)吗?</li>
<li>如果以上可行,我如何正确创建此子类的实例以在我的 ViewController 中使用?</li>
</ul></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>已经存在一个可以用于此目的的对象 - <code>UICollectionViewController</code>。这可以被子类化并添加到任何 ViewController (作为 subviewController ),并且已经包含一个 Collection View ,它是数据源和委托(delegate)。 </p>

<p>您当前方法的问题是:</p>

<ul>
<li>正如您所指出的,通过将 View 作为其自己的数据源和委托(delegate),您将过多的责任放在一个对象上</li>
<li>xib 的文件所有者不能是 xib 中的对象。当您加载 xib 时,您发送给 <code>owner</code> 参数的对象是文件的所有者。我不知道您最终使用您当前拥有的代码最终会得到什么。 </li>
<li>我不知道你为什么坚持使用 xib - 除了额外文件的头痛和 nib 加载的复杂性之外,这会给你带来什么?只需创建一个 Collection ViewController ,您可以在 init 和 viewDidLoad 方法中指定布局和注册单元格。 </li>
</ul></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UICollectionView 子类可在多个 viewController 中重用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/19883127/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/19883127/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UICollectionView 子类可在多个 viewController 中重用