如何切换 UITableView 和 UICollectionView

Posted

技术标签:

【中文标题】如何切换 UITableView 和 UICollectionView【英文标题】:How to switch UITableView and UICollectionView 【发布时间】:2013-01-03 12:54:27 【问题描述】:

我有一个带有按钮的项目,允许用户在列表视图 (UITableView) 和网格视图 (UICollectionView) 之间切换,但我不知道该怎么做。

【问题讨论】:

这不是很糟糕的英语,但它目前是一个糟糕的问题。 究竟你坚持什么?到目前为止,您尝试过什么? 对不起@但我是新手! 【参考方案1】:

假设您的控制器有一个名为tableViewUITableView 属性和一个名为collectionViewUICollectionView 属性。在您的viewDidLoad 中,您需要添加起始视图。假设它是表格视图:

- (void)viewDidLoad

    self.tableView.frame = self.view.bounds;
    [self.view addSubview:self.tableView];

然后在您的按钮回调中,交换视图:

- (void)buttonTapped:(id)sender

     UIView *fromView, *toView;

     if (self.tableView.superview == self.view)
     
         fromView = self.tableView;
         toView = self.collectionView;
     
     else
     
         fromView = self.collectionView;
         toView = self.tableView;
     

     [fromView removeFromSuperview];

     toView.frame = self.view.bounds;
     [self.view addSubview:toView];

如果你想要一个花哨的动画,你可以改用+[UIView transitionFromView:toView:duration:options:completion:]

- (void)buttonTapped:(id)sender

     UIView *fromView, *toView;

     if (self.tableView.superview == self.view)
     
         fromView = self.tableView;
         toView = self.collectionView;
     
     else
     
         fromView = self.collectionView;
         toView = self.tableView;
     

     toView.frame = self.view.bounds;
     [UIView transitionFromView:fromView
                         toView:toView
                       duration:0.25
                        options:UIViewAnimationTransitionFlipFromRight
                     completion:nil];

【讨论】:

谢谢!但是我可以使用哪个 ViewController? TableViewController 或 CollectionViewController。如何在外部类(不是 ViewController)中使用 TableViewDelegate 和 Datasource? 只需使用普通的 UIViewController,并将两种类型的视图作为属性添加到它。或者,如果您想将两个视图的逻辑分开,您可以创建一个 UITableViewController 和一个 UICollectionViewController 并使用它们的视图而不是主控制器的属性。 如果您的视图已经是视图层次结构的一部分(例如,通过添加 xib/storyboard),您必须将UIViewAnimationOptionShowHideTransitionViews 作为+transitionFromView:ToView:duration:options:completion: 方法中的选项参数之一传递。跨度> 你应该使用UIViewAnimationOptionTransitionFlipFromRight而不是UIViewAnimationTransitionFlipFromRight 非常感谢!但是我如何让子视图的单元格在选择时调用父级的方法?我想将控制器推到父导航控制器上【参考方案2】:

另一种处理方法是使用单个UICollectionView,您可以在其中根据您想要的模式切换UICollectionViewFlowLayout 实现。

为了将UITableView转换成UICollectionView,网上有很多教程,比如this。

【讨论】:

以上是关于如何切换 UITableView 和 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 带有滑动切换到来自其他数组和指示器的数据

如何切换到将 Core Data 用于简单的 UITableView 而不是 NSArray?

collectionView:didSelectItemAtIndexPath:没有被调用

iOS之UICollectionView详解

UITableView - 从两个数组切换数据

切换到 UITableView 控制器并滚动到部分的开头