您如何引用在for循环中创建的特定视图?

时间:2018-11-29 15:52:49

标签: ios swift

I。我使用for循环在ViewController中创建了一些表视图

for index in 0...array.count - 1 {

        if let table = Bundle.main.loadNibNamed("Table", owner: self, options: nil)?.first as? Table {

            table.frame.origin.y = 200 * CGFloat(index) + 100

            table.dataSource = self
            table.delegate = self
            table.register(UINib.init(nibName: "Cell", bundle: nil), forCellReuseIdentifier: "Cell")
            table.isScrollEnabled = false

            self.view.addSubview(table)
        }

    }

II。现在,我想分别为每个表指定行数。显然是这样完成的:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // Return the number of items in the sample data structure.

    var count:Int?

    if tableView == self.tableView {
        count = sampleData.count
    }

    if tableView == self.tableView1 {
        count =  sampleData1.count
    }

    return count!

}

该示例使用self.tableView和self.tableView1引用了两个不同的表视图。如何引用在for循环中创建的特定表视图?它们都被创建为“表”,而我没有将它们存储在唯一变量下。

1 个答案:

答案 0 :(得分:1)

我建议创建一个属性来保存您的Table实例:

var tables: [Table]?

然后您的例程可以填充此数组:

tables = (0..<array.count).compactMap { index -> Table? in
    guard let table = Bundle.main.loadNibNamed("Table", owner: self)?.first as? Table else {
        return nil
    }

    table.frame.origin.y = 200 * CGFloat(index) + 100

    table.dataSource = self
    table.delegate = self
    table.register(UINib(nibName: "Cell", bundle: nil), forCellReuseIdentifier: "Cell")
    table.isScrollEnabled = false

    return table
}

tables?.forEach { view.addSubview($0) }

然后,您可以在各种数据源方法中使用tables的数组。