多个动态表,动态列为swift 4

多个动态表,动态列为swift 4,swift,dynamically-generated,Swift,Dynamically Generated,表格:[{ Id, 名称, 类型, 行[{ Id, 名称 }], 列[{ Id, 名称 }] }] (一个简单的表达) 我需要向控制器添加多个表。数据将以json的形式提供。图像将被排序到视图控制器中 我该怎么做? 我正在以编程方式使用swift 4 tableview 如何在单个ControllerView中动态创建多个tableview 该表必须有多个列。要按表类型填充的表行。 如果行类型为复选框,则第一列中的标签将是所有其他列中的复选框 我怎么做 从现在开始谢谢。我建议您使用一个包含多个

表格:[{
Id,
名称,
类型,
行[{
Id,
名称
}],
列[{
Id,
名称
}]
}]

(一个简单的表达)

我需要向控制器添加多个表。数据将以json的形式提供。图像将被排序到视图控制器中

我该怎么做? 我正在以编程方式使用swift 4 tableview

如何在单个ControllerView中动态创建多个tableview

该表必须有多个列。要按表类型填充的表行。 如果行类型为复选框,则第一列中的标签将是所有其他列中的复选框

我怎么做


从现在开始谢谢。

我建议您使用一个包含多个部分和行的tableview。不确定您的UX外观如何。但是当我们有了numberOfSection和NumberOf Rows的概念,其中每个部分都可以通过标题(分组的tableview)来分隔时,我们就不知道为什么我们需要在一个ViewController中使用多个tableview。

创建多个tableview相对来说比较简单。我假设CollectionView也是如此,如果您想要真正的多列而不是mukti组件tableView单元格,那么就需要CollectionView,尽管我从未尝试过

简单地说,您需要实例化两个TableView,并将它们添加为子视图。有趣的一点是处理委托函数。你有两个选择:

  • 使用两个不同的类作为代理,每个类一个。这通常更容易理解,但确实涉及到大量锅炉铭牌代码的复制
  • 为两个代理使用一个类(甚至可能是视图控制器,但它有可能会出现大量视图控制器综合症),并在每个方法中测试它应用的tableview
  • 其中第一个非常明显,下面是第二个的高级示例

    class MyCustomCell: UITableViewCell {
      static let cellID = "CustomCellID"
      // set up custom tableViewCell as required
    }
    
    class MyVC: UIViewController {
      var table1 = UITableView()
      var table2 = UITableView()
    
      override func viewDidLoad() {
        super.viewDidLoad
        table1.delegate = self
        table1.datasource = self
        table2.delegate = self
        table2.datasource = self
        view.addSubview(table1)
        view.addSubview(table2)
        tableView.register(MyCustomCell.self, forCellReuseIdentifier: MyCustomCell.cellID)
        tableView.register(MyCustomCell.self, forCellReuseIdentifier: MyCustomCell.cellID)
        //some AutoLayout code to layout the tables in the view
      }
    }
    
    extension MyVC: UITableViewDelegate, UITableViewDataSource {
       func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         if tableView === table1 {
            //return appropriate value for section in table 1
         } else {
           //return appropriate value for section in table 1
         }
      }
    
      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if tableView === table1 {
          //create and return cell for table 1
        } else {
          //create and return cell for table 2
        }
      }
    }
    
    显然,这只是大纲,需要实际的实现代码和其他必要的tableView函数。注意使用
    ==
    检查表视图。这将检查它们是否是完全相同的对象,而不仅仅是等效对象

    如果两个表都需要相同的值(例如,您希望它们使用相同的tableViewCell),那么您可以不进行检查就删除它们


    写了所有这些之后,除非至少有一个表显示静态行数,并且可以禁用滚动,否则我会说它在iPhone上看起来很糟糕,在大多数情况下,在iPad上也不会更好

    TableView不能有超过1列。改用collectionView。我可以添加一个具有可变列的动态collectionView吗?我的UX分区将是分区。她坐在一个叫达内梅勒·奥拉卡的座位上。这里的问题是我需要在一页上显示这个列表。下面是链接中图片的示例。这里只有一个部分。我希望你能把这张照片放在第一个问题里!这只需要一个带有一个分区的tableView单元格和一个自定义表格单元格及标题。@lifeCode您的用户体验非常简单,正如Flanger所说的一个带有自定义单元格的tableView就足够了,请根据您的滚动要求,将servey部分和全部作为tableView标题或分区标题。对不起。这张桌子上可能有n块。行列可能来自一个变量。行数可以是N。列数可以是N。我将尝试上面共享的代码。如果列数是N,那么您如何在屏幕中适应它,在这种情况下,它应该是水平滚动(对于动态列)。更好的方法是tableview单元格应该包含CollectionViews给定您作为注释添加到另一个答案的图像,这表明您不需要您最初要求的内容,那么这可能不相关,但我将把它留在这里,以防其他人通过搜索多个动态tableview发现它!