在Swift的iOS应用程序中显示一个表(在html/Excel电子表格中)

Lyr*_*yra 5 ios uicollectionview swift

我一直在寻找有关如何做到这一点的解决方案,但我有点困惑.

我想在我的应用程序中显示数据表,而不是Apple的TableView,更像是在Excel或HTML中找到的表.此外,在我的应用程序中,我将在不同的页面中有多个这样的表格,我希望以相同的方式设置样式,而不是所有具有相同行数或列数的表格.这些表格可能会与图像或文本一起显示在屏幕上,可能永远不会单独显示.(所以我需要一个可放在UIViewController中的元素)

基本上就像这样一张桌子(因为我的数据是保密的,我把它放在谷歌图片上) 在此输入图像描述

我有关于如何做到这一点的理论,但我不确定它是正确的还是确切地说如何做到这一点.

我的理论是我应该创建一个UICollectionView的子类,让我们称之为MyTablesView.MyTablesView将有一个名为data的变量.我的包含表格的页面/ VC将有一个MyTablesView实例,并在此变量中提供数据.MyTablesView负责样式设置和显示此数据.

我对Swift相当新,我不知道究竟是什么,所以我不确定如何解决这个问题.我对如何编写UICollectionView非常困惑.我试着阅读这个教程:http://www.raywenderlich.com/78550/beginning-ios-collection-views-swift-part-1但它是一个UICollectionViewController而不是UICollectionView所以我不知道如何调整它.

所以现在这就是我所有的...类MyTablesView:UICollectionView {var data = [String]}(我现在把字符串放了,因为我不是100%肯定会在表中的数据,它可能会最终成为双打,但我还需要一些标题......)

所以我想我的问题是:如何正确地子类化UICollectionView以显示ViewController将提供给它的数据?

如果有什么不清楚,请告诉我.提前致谢.

Lyr*_*yra 6

好吧,事实证明我没有彻底搜索SO,因为这里是我一直在寻找的答案: 如何使用Swift创建一个简单的集合视图

由于它是另一个Stack Overflow主题,我应该复制答案还是信任Stack Overflow来保持链接活着?


我链接的答案显示了一个数据网格,但我想要一个表,这意味着我需要稍微调整它,因为我想要行,所以下面是我的代码的概述.其中大部分与我所链接的答案相似.我所做的更改将数据显示在多维数组中,这意味着我还必须在我的类中添加numberOfSectionsInCollectionView方法并相应地调整其他方法.我仍然需要做一些样式才能让它看起来正确.

  1. 在我的故事板中,我有一个VC,我拖动了一个UICollectionView.在它的第一个单元格中,我拖了一个UILabel.

  2. VC实现了UICollectionViewDataSource和UICollectionViewDelegate,并且有一个名为data的参数,其中包含要显示的数据.从故事板我按住Ctrl +拖动UICollectionView并将其命名为mytable.

    class MyView: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{
      @IBOutlet weak var mytable: UICollectionView! 
      var data = [[String]]()
    
      override func viewDidLoad() {
        data = [["first", "1", "2"], ["second", "3", "4"]]
      }
    
    // --- UICollectionViewDataSource protocol ---
    
      //returns number of sections = subarrays in data
      func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int{
        return data.count
      }
    
      //returns number of items in a section= number of elements in a subarray in data    
      func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return data[section].count
      }
    
    
      func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        // get a reference to our storyboard cell
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! MyTableCells
    
        // Use the outlet in our custom class to get a reference to the UILabel in the cell
        cell.myLabel.text = data[indexPath.section][indexPath.item]
    
        return cell
      }
    
    // --- UICollectionViewDelegate protocol ---
      func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        // handle tap events
        print("You selected cell #\(indexPath.item)!")
      }
    
    Run Code Online (Sandbox Code Playgroud)

    }

  3. 我还创建了UICollectionViewCell的子类.在故事板中,我按住UILabel将UILabel从UICollectionView的第一个单元格拖到我的子类中,并将其命名为myLabel.

    import Foundation
    class MyTableCells: UICollectionViewCell {  
      @IBOutlet weak var myLabel: UILabel! 
    }
    
    Run Code Online (Sandbox Code Playgroud)

在故事板中,我将委托和数据源挂钩到VC(选择UICollectionView,单击圆圈并将其拖动到VC)

我现在只为我的一个VC做过,我实际上可能是UIViewController的子类,因为我猜这个实现可以有多个VC.