未达到 TableView 中的配置

问题描述

所以我试图显示一个 TableView,但我目前只得到一个空的 tableview。经过进一步检查,我发现 configure 块没有运行。这是为什么?

代码

func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: teamCellIdentifier,for: indexPath)

    print("reached")
    
    func configure(cell: UITableViewCell,for indexPath: IndexPath) {

     print("not reached")
      guard let cell = cell as? TeamCell else {
          return
      }

      let team = fetchedResultsController.object(at: indexPath)
      cell.teamLabel.text = team.teamName
      cell.scoreLabel.text = "Wins: \(team.wins)"

      if let imageName = team.imageName {
        cell.flagImageView.image = UIImage(named: imageName)
      } else {
        cell.flagImageView.image = nil
      }
    }
    return cell
  }
}

团队单元

class TeamCell: UITableViewCell {
  // MARK: - IBOutlets
  @IBOutlet weak var teamLabel: UILabel!
  @IBOutlet weak var scoreLabel: UILabel!
  @IBOutlet weak var flagImageView: UIImageView!

  // MARK: - View Life Cycle
  override func prepareForReuse() {
    super.prepareForReuse()

    teamLabel.text = nil
    scoreLabel.text = nil
    flagImageView.image = nil
  }
}

解决方法

您的 tableView 为空或看起来为空以及您的 tableView 方法未被调用的原因有两个。

1)- 表格视图的高度或宽度等于 0,无需分别加载和显示 tableView 和 tableView 单元格。

2)- 您没有将 tableView 数据源和委托连接到您的视图控制器。

2.1) 您可以通过故事板添加 TableView 委托和数据源(见下图)

enter image description here

enter image description here

2.2) 您可以通过视图控制器中的代码添加 TableView 委托和数据源,例如:

2.2.1) 在 vi​​ewDidLoad() 方法中:

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

// TableView Delegates & DataSource
    tableView.delegate = self
    tableView.dataSource = self
}

2.2.2) 或者查看 tableView outlet didSet(我更喜欢这种方式,如果我不通过故事板来做的话):

@IBOutlet weak var tableView: UITableView! {
    didSet {
        tableView.delegate = self
        tableView.dataSource = self
    }
}
,

您的代码具有如下结构:

// This next line defines a function called a
func a() {
    print("a")
    
    // This next line only defines a function called b:
    // that is scoped inside the 'a' function
    func b() {
      print("b")
    }

    // Defining a function does not invoke the function
    // That would need an actual call here like this:
    // b()
}

// I can't call b here because it's nested inside the function 'a'
,

首先,您在函数内部有一个嵌套的 func 吗? 把它拿出来.... 然后在这一行之后:

let cell = tableView.dequeueReusableCell(withIdentifier: teamCellIdentifier,for: indexPath)

这样做:

configure(cell: cell,for indexPath: indexPath)