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

How do I set up a view with multiple Table Views and different TableViewCells for each Table View?

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

我将 UITableViewDataSource, UITableViewDelegate 实现为超级 类,并为 viewDidLoad 中的每个 table 视图编写了 delegatedatasource

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变量returns nil 相反,它应该 return 给定的单元格。

老实说,您根本不需要变量 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      

不要为使单元格出列的初始调用而烦恼。

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
    }
}