【问题标题】:is it possible to have 2 UICollectionViews under one controller and toggle between them?是否可以在一个控制器下拥有 2 个 UICollectionView 并在它们之间切换?
【发布时间】:2014-04-17 19:48:14
【问题描述】:

我昨天发布了这个问题:https://stackoverflow.com/questions/23119494/what-is-the-best-way-to-dynamically-change-the-style-of-a-uicollectionview,收到了 0 条回复。

我决定尝试一下。我要做的是在单击 UISegmentedControl 时将网格样式默认集合视图显示更改为单个文件显示。

默认网格样式:

点击按钮左段后显示单个项目视图:

我有一个方法准备好响应每个段的点击。我现在在点击段控件时隐藏 collectionView 并在再次点击时取消隐藏它。:

- (void)displayTypeSegmentSelected
{
    _selectedDisplayTypeIndex = [_displayTypeControl selectedSegmentIndex];

    if (_selectedDisplayTypeIndex == 0) {
        NSLog(@"Single file item view selected");
        [_collectionView setHidden:YES];
    } else {
        NSLog(@"Grid style view selected");
        [_collectionView setHidden:NO];
    }
}

这可以完美地显示和隐藏我的默认 collectionView,并且此控制器其余部分的功能不受影响。

可能的解决方案:

现在我想知道是否有办法使用单个文件设计创建另一个collectionView,并在默认collectionView 隐藏时显示它。它将使用完全相同的数据源并插入到控制器中并正常工作。

视图界面生成器可以这样做吗?如果是这样,我该怎么做?

这可以通过编程方式完成吗?如果是这样,我该怎么做?

我想知道我是否应该在最初创建两个 collectionViews 而不是在开始时创建默认值,并且仅在单击 segmentControl 时才创建单个文件。

希望有一些例子或清晰的解释。整天都在研究如何做到这一点。

问候

【问题讨论】:

  • 你实施成功了吗?嗨,我可以得到任何示例实现:Github 将适用于像我这样的新初学者:(

标签: ios objective-c cocoa-touch uicollectionview uicollectionviewcell


【解决方案1】:

可以使用两个视图控制器并在导航堆栈上切换它们的位置。

但是,对于这种特殊情况,我建议使用一个具有两个全尺寸视图的视图控制器,并在最顶层视图的视图层次结构中切换它们的位置,或者只是隐藏和取消隐藏顶部的那个。

【讨论】:

  • 如何添加第二个collectionView? IB可以吗?还是必须以编程方式进行?
  • 在 IB 中每次拖放都是可能的。以编程方式,您可以在viewDidLoad 中使用self.secondView = [[UIView alloc] initWithFrame:self.view.frame];。但是,在大多数情况下,使用 bounds 比使用 frame 更节省。在这里它应该工作。
  • 嗨,我可以得到任何示例实现:Github 适合像我这样的新手。
  • @Meenu,恐怕我没有。坦率地说,我自己从来没有这样做过。但是,这很容易。你有一个视图控制器和一个基本视图,即 self.view。然后使用 IB(故事板编辑器)创建 view1 和 view2,或者以编程方式创建它们。但是在您的视图控制器中创建属性并设置/连接它们,以便您可以使用 self.view1 和 self.view2 来处理它们。两者都与 self.view 共享相同的框架,这意味着覆盖所有可用的屏幕。 (续...)
  • ... (cont) 使 self.view1 成为 self.view 的子视图,并使 self.view2 成为 self.view2 的子视图。或制作 self.view 的两个子视图,但先添加 self.view1。现在 self.view2 是可见的。并且只有 self.view2 是可见的。现在,不要在视图之间切换,只需隐藏 self.view2。 [self.view2 setHidden = YES] 稍后,在需要时,再次取消隐藏。真的,就是这么简单。
【解决方案2】:

您可以使用相同的集合视图,但只更改数据源和委托。

【讨论】:

    猜你喜欢
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多