在单个视图中控制多个tableviews

时间:2016-07-25 05:07:30

标签: ios swift uitableview

我有一个嵌套在集合视图中的表视图,我将返回3个(可能更多的未来)集合视图单元格,我想知道是否有可能在每个集合单元格中显示不同的内容?我附上了一些截图,以便更好地了解我正在采取的措施。感谢。

enter image description here

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 3
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return 1
}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell

    // Configure the cell...

    cell.textLabel?.text = "Homeroom"
    cell.detailTextLabel?.text = "8:15 AM - 9:00 AM"
    cell.selectionStyle = .None
    return cell
}

2 个答案:

答案 0 :(得分:4)

是的,你可以。您需要为每个tableView设置一个属性,并在delegate方法中将其与下面的

进行比较
class Some: UIViewController {
    var firstTableView: UITableView
    var secondTableView: UITableView

    override func viewDidLoad() {
        firstTableView = YOUR_FIRST
        secondTableView = YOUR_Second
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        if tableView == firstTableView {
            return 2;
        }
        else if tableView == secondTableView {
            return 1;
        }
        return 3
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        if tableView == firstTableView {
            return 2;
        }
        else if tableView == secondTableView {
            return 1;
        }
    }


    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
        if tableView == firstTableView {
            cell = tableView.dequeueReusableCellWithIdentifier("cellOfFirstTableView", forIndexPath: indexPath) as! UITableViewCell
        }
        else if tableView == secondTableView {
            cell = tableView.dequeueReusableCellWithIdentifier("cellOfSecondTableView", forIndexPath: indexPath) as! UITableViewCell
        }
        // Configure the cell...
        if tableView == firstTableView {
            cell.textLabel?.text = "Homeroom"
            cell.detailTextLabel?.text = "8:15 AM - 9:00 AM"
            cell.selectionStyle = .None
        }
        else if tableView == secondTableView {
            cell.textLabel?.text = "Homeroom"
            cell.detailTextLabel?.text = "8:15 AM - 9:00 AM"
            cell.selectionStyle = .None
        }

        return cell
    }
}

答案 1 :(得分:0)

您可以将UITableViewDelegate / UITableViewDataSource方法与if else条件或类似的东西一起使用

例如。

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if tableView == table1 { // table1 is a global var for the table

    } else if tableView == table2 {

    }
}

但我认为如果你为每个表使用单独的控制器类就很清楚,这样你就可以轻松管理代码。

但这取决于您拥有的数据类型。如果数据完全不相关,您可以使用3个不同的控制器。 或者,如果您可以在3个表中重复使用数据和代码,那么您可以决定是否要使用3个不同的控制器或使用上述方法的i类。

例如

let table1Controller = Table1Controller(dataList1)
let table2Controller = Table2Controller(dataList2)
let table3Controller = Table3Controller(dataList3)

table1.delegate = table1Controller
table1.dataSource = table1Controller

table2.delegate = table2Controller
table2.dataSource = table2Controller

table3.delegate = table3Controller
table3.dataSource = table3Controller