我正在尝试构建一个视图,该视图显示四个不同的tableViews
,每个tableViewCells
都具有不同的tableView
。我想评估我在tableViewCell
中实现的cellForRowAt
函数中不同的ViewController
类,但似乎不起作用。
我将UITableViewDataSource, UITableViewDelegate
实现为超类,并为delegate
中的每个表视图编写了datasource
和viewDidLoad
。
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
相反,它应该返回给定的单元格。
答案 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
}
}