菜鸟教程小白 发表于 2022-12-13 07:29:21

ios - 如何在 2 个不同的 UICollectionViewFlowLayout 实例之间切换?


                                            <p><p>这几天一直在努力。我试图让应用程序的客户在购物时在两种显示类型之间切换。 </p>

<p>现在我正在使用 2 个 <code>UICollectionView</code> 和他们自己的自定义 <code>UICollectionViewCell</code> 并且两者之间的切换工作正常,但我发现使用 2 个不同的<code>UICollectionView</code> 正在成为一种痛苦。我为主要 <code>UICollectionView</code> 实现的某些东西在替代 <code>UICollectionView</code> 中无法正常工作。</p>

<p><strong>这就是改变显示的方式。我使用带有自定义方法的 <code>UISegmentedControl</code>:</strong></p>

<p> <img src="/image/heerr.png" alt="enter image description here"/> </p>

<pre><code>- (void)displayTypeSegmentSelected
{
    _selectedDisplayTypeIndex = ;


    if (_selectedDisplayTypeIndex == 0) {
      NSLog(@&#34;Single file item view selected&#34;);
      _fromCollectionView = _collectionView;
      _toCollectionView = _collectionView2;


    } else if (_selectedDisplayTypeIndex == 1) {
      NSLog(@&#34;Grid style view selected&#34;);
      _fromCollectionView = _collectionView2;
      _toCollectionView = _collectionView;
    }

    ;

    ];
    ;

}
</code></pre>

<p><strong>我通过 stackoverflow 获得了两个不同的建议,关于更好的方法来做我想做的事情。</strong></p>

<ol>
<li>使用 2 个 <code>UICollectionViewFlowLayout</code> 并在它们之间切换,而不是 2 个 <code>UICollectionView</code>。</li>
<li>根据选择的段返回适当的自定义 <code>UICollectionViewCell</code>。</li>
</ol>

<p>我觉得第一种方法会更好。我需要将界面构建器 <code>UICollectionViewFlowLayout</code> 设为 IBOutlet,因为连接的 <code>UICollectionView</code> 不是以编程方式创建的。然后我会以编程方式创建第二个 <code>UICollectionViewFlowLayout</code>。 </p>

<p>在我的 displayTypeSegmentSelected 方法中,我将加载两个 <code>UICollectionViewFlowLayout</code> 之一,具体取决于所选的段。</p>

<p><strong>单个文件显示如下所示:</strong></p>

<p> <img src="/image/6FnYY.png" alt="enter image description here"/> </p>

<p><strong>网格样式显示如下所示:</strong></p>

<p> <img src="/image/WRLWe.png" alt="enter image description here"/> </p>

<p><strong>问题:</strong></p>

<p>我认为我有正确的想法来解决我最初的问题以及如何去做。但是,我会从更有经验的开发人员那里提出意见和示例。
你会怎么做?你能给我一个清晰的例子吗?</p>

<p>亲切的问候</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这就是我最后做的事情。</p>

<p><strong>点击特定的分段控件后,我更改了布局并重新加载了单元格。</strong></p>

<pre><code>- (void)displayTypeSegmentSelected
{
    _selectedDisplayTypeIndex = ;

    if (_selectedDisplayTypeIndex == 0) {
      NSLog(@&#34;Single file item view selected&#34;);
      ;
      ];


    } else if (_selectedDisplayTypeIndex == 1) {
      NSLog(@&#34;Grid style view selected&#34;);
      ;
      ];
    }

}
</code></pre>

<p><strong>在我的 <code>cellForItemAtIndexPath</code> 中,根据屏幕上显示的布局,我加载了具有正确设置的特定自定义单元格。</strong></p>

<pre><code>-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object
{

      NSLog(@&#34;collectionview 1 loaded&#34;);

      static NSString *CellIdentifier = @&#34;Cell&#34;;
      VAGGarmentCell *cell = ;
      static NSString *CellIdentifier2 = @&#34;Cell2&#34;;
      VAGGarmentCell2 *cell2 = ;


    if ([ isEqual: _flowLayout]) {
      [ startAnimating];

      PFFile *userImageFile = ;
      [ setFile: userImageFile];
      [ loadInBackground];

      [ stopAnimating];

      [ setText:];
      [ setText:]];
      return cell;

    } else if ([ isEqual: _flowLayout2]) {
      [ startAnimating];

      PFFile *userImageFile = ;
      [ setFile: userImageFile];
      [ loadInBackground];

      [ stopAnimating];

      [ setText:];
      [ setText:]];
      return cell2;
    }

   return 0;

    //_addToFavouritesButton = ;

    ;
}
</code></pre>

<p><strong>在我的 viewDidLoad 中,我在这里引用了用于单个项目显示的自定义单元格的 nib 文件。</strong></p>

<pre><code>// Grab cell nib file and give a reuse identifier
forCellWithReuseIdentifier:@&#34;Cell2&#34;];
</code></pre>

<p>我遇到了崩溃,但它们很难复制,尽管每次我在不同的布局之间切换时,我的内存都会不断增加。我猜我需要删除一些旧代码。我明天整理一下,用仪器检查一下。不过这已经完成了,我可以继续前进。</p>

<p>我可能需要重构我重复自己的代码。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在 2 个不同的 UICollectionViewFlowLayout 实例之间切换?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23246022/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23246022/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在 2 个不同的 UICollectionViewFlowLayout 实例之间切换?