如何设置具有多个表视图和每个表视图不同的TableViewCell的视图?

时间:2019-04-19 00:14:59

标签: swift uitableview delegates tableview datasource

我正在尝试构建一个视图,该视图显示四个不同的tableViews,每个tableViewCells都具有不同的tableView。我想评估我在tableViewCell中实现的cellForRowAt函数中不同的ViewController类,但似乎不起作用。

我将UITableViewDataSource, UITableViewDelegate实现为超类,并为delegate中的每个表视图编写了datasourceviewDidLoad

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{   

    //Outlets

    @IBOutlet weak var scheduleView: UIView!
    @IBOutlet weak var scheduleTableView: UITableView!

    @IBOutlet weak var goalsView: UIView!
    @IBOutlet weak var goalsTableView: UITableView!

    @IBOutlet weak var toDoView: UIView!
    @IBOutlet weak var toDoTableView: UITableView!

    @IBOutlet weak var motivationView: UIView!
    @IBOutlet weak var motivationTableView: UITableView!


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        scheduleView.clipsToBounds = true
        scheduleView.layer.cornerRadius = 15
        goalsView.clipsToBounds = true
        goalsView.layer.cornerRadius = 15
        toDoView.clipsToBounds = true
        toDoView.layer.cornerRadius = 15
        motivationView.clipsToBounds = true
        motivationView.layer.cornerRadius = 15

        // Delegate & Datasources
        scheduleTableView.delegate = self
        scheduleTableView.dataSource = self
        goalsTableView.delegate = self
        goalsTableView.dataSource = self
        toDoTableView.delegate = self
        toDoTableView.dataSource = self
        motivationTableView.delegate = self
        motivationTableView.dataSource = self

    }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        var realCell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "scheduleCell", for: indexPath)


        if tableView == scheduleTableView{
            var cell = tableView.dequeueReusableCell(withIdentifier: "scheduleCell", for: indexPath)
            cell.textLabel?.text = "Text"

        }else if tableView == goalsTableView{
            var cell = tableView.dequeueReusableCell(withIdentifier: "goalsCell", for: indexPath)
            cell.textLabel?.text = "Text"

        }else if tableView == toDoTableView{
            var cell = tableView.dequeueReusableCell(withIdentifier: "toDoCell", for: indexPath)
            cell.textLabel?.text = "Text"


        }else if tableView == motivationTableView{
            var cell = tableView.dequeueReusableCell(withIdentifier: "motivationCell", for: indexPath) as! motivationTableViewCell
            cell.textLabel?.text = "Text"
            cell.motivationImage.image = #imageLiteral(resourceName: "placeholderImage")
            cell.motivationLabel.text = "TestText"

            realCell = cell
        }
        return realCell      
    }

如果我运行此代码,则realCell变量将返回nil 相反,它应该返回给定的单元格。

2 个答案:

答案 0 :(得分:0)

老实说,您根本不需要变量cell。只需将cell更改为realCell,然后删除以下代码行即可:

realCell = cell

最终密码:

var realCell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "scheduleCell", for: indexPath)


if tableView == scheduleTableView {
    realCell = tableView.dequeueReusableCell(withIdentifier: "scheduleCell", for: indexPath)
    realCell.textLabel?.text = "Text"
} else if tableView == goalsTableView {
    realCell = tableView.dequeueReusableCell(withIdentifier: "goalsCell", for: indexPath)
    realCell.textLabel?.text = "Text"
} else if tableView == toDoTableView {
    realCell = tableView.dequeueReusableCell(withIdentifier: "toDoCell", for: indexPath)
    realCell.textLabel?.text = "Text"
} else if tableView == motivationTableView {
    realCell = tableView.dequeueReusableCell(withIdentifier: "motivationCell", for: indexPath) as! motivationTableViewCell
    realCell.textLabel?.text = "Text"
    realCell.motivationImage.image = #imageLiteral(resourceName: "placeholderImage")
    realCell.motivationLabel.text = "TestText"
}

return realCell      

答案 1 :(得分:0)

不要打扰初始调用以使单元出队。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if tableView == scheduleTableView {
        var cell = tableView.dequeueReusableCell(withIdentifier: "scheduleCell", for: indexPath)
        cell.textLabel?.text = "Text"

        return cell
    } else if tableView == goalsTableView {
        var cell = tableView.dequeueReusableCell(withIdentifier: "goalsCell", for: indexPath)
        cell.textLabel?.text = "Text"

        return cell
    } else if tableView == toDoTableView {
        var cell = tableView.dequeueReusableCell(withIdentifier: "toDoCell", for: indexPath)
        cell.textLabel?.text = "Text"

        return cell
    } else /*if tableView == motivationTableView*/ {
        var cell = tableView.dequeueReusableCell(withIdentifier: "motivationCell", for: indexPath) as! motivationTableViewCell
        cell.textLabel?.text = "Text"
        cell.motivationImage.image = #imageLiteral(resourceName: "placeholderImage")
        cell.motivationLabel.text = "TestText"

        return cell
    }
}