UITableView单元格未显示

时间:2018-10-06 21:25:13

标签: ios swift uitableview

import UIKit

class ToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var DateLabel: UILabel!
@IBOutlet weak var MonthLabel: UILabel!
@IBOutlet weak var DayLabel: UILabel!
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var newButton: UIImageView!

static var ToDoEvents:[event] = []

override func viewDidLoad() {
    super.viewDidLoad()
    ToDoViewController.readFromFile()
    let nib = UINib(nibName: "CustomCell", bundle: nil)
    tableView.register(nib, forCellReuseIdentifier: "customCell")
}

public static func readFromFile(){
    ToDoViewController.ToDoEvents.append(event(eventName: "Spanish Workbook", eventLength: 3601, complete: false))
    ToDoViewController.ToDoEvents.append(event(eventName: "History Test", eventLength: 37, complete: false))
    ToDoViewController.ToDoEvents.append(event(eventName: "Lit Essay", eventLength: 40, complete: false))
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return ToDoViewController.ToDoEvents.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "customCell") as! CustomCell
    let currentEvent = ToDoViewController.ToDoEvents[indexPath.row]
    let eventName = currentEvent.name!
    let eventLength = currentEvent.time!
    let completion = currentEvent.isComplete!
    print(eventName)
    print(eventLength)
    print(completion)

    cell.customInit(name: "\(eventName)", time: "\(eventLength)", completed: completion)
    return cell
}

}

当前,我正在尝试创建带有待办事项列表的应用。我正在使用UITableView显示信息,并且有一个名为“ CustomCell”的自定义UITableViewCell,用于在表视图中显示信息。但是,当我运行此代码时,屏幕上没有任何显示。我还在CellForRowAtIndexPath方法中添加了一些打印语句,这些打印语句没有得到执行。然后我尝试添加

self.tableView.delegate = self
self.tableView.dataSource = self

但是,当我尝试使用此附加代码运行该应用程序时,该应用程序崩溃并给出以下错误:

  Terminating app due to uncaught exception 

  'NSInternalInconsistencyException', reason: 
  'Could not load NIB in 
   bundle: 'NSBundle 
  </Users/sid/Library/Developer/CoreSimulator
  /Devices/812843C0-ABBA-43E9-A391- 
 0BED3CBB5030/data/Containers/Bundle
 /Application/F8DABFF7-80ED-49E1-8760-315C3C99AFB1/TimeIt.app> 
 (loaded)' with name 'CustomCell''

我还看了多篇教程,概述了如何向代码中添加自定义单元,而这些教程均未使用tableView.delegate = self或tableView.dataSource = self代码。

我不确定自己在做什么错。感谢所有帮助

先谢谢您!

3 个答案:

答案 0 :(得分:0)

我按照以下步骤操作,并修复了错误:

  1. 打开XIB文件会引起问题
  2. 单击左侧栏上文件的所有者图标(顶部,看起来像一个 黄色轮廓框)
  3. 如果看不到右侧边栏,请单击第三个图标 在工具栏中“视图”上方。
  4. 这将显示右侧边栏在右侧边栏中, 单击第三个标签-看起来有点像报纸的标签 在顶部的“自定义类别”下,确保“类别”是 应该与此视图相对应的ViewController。
  5. 如果没有,请输入它。在右侧边栏中,单击最后一个 标签-看起来像一个带有箭头的圆圈的标签,您应该 看到下面有“视图”的“插座”。
  6. 将其旁边的圆圈拖动到左侧栏中的“视图”图标上 (底部,看起来像一个白色正方形,带有灰色的轮廓。

保存xib并重新运行

答案 1 :(得分:0)

添加这两行是正确的方法:

self.tableView.delegate = self self.tableView.dataSource = self

您的崩溃日志为您指明了正确的方向。 您没有名为“ CustomCell”的xib文件。

如果没有为UITableViewCell使用单独的xib文件,则需要在情节提要中为您的单元格设置适当的类和标识符。如果您在情节提要中进行设置,则无需为表格视图注册xib。

仅当您为表视图单元格使用单独的文件时,才注册nib。

答案 2 :(得分:0)

似乎像register方法一样找不到正确的Nib。名称或标识符可能不正确。您可以使用类似的内容:

func registerCell(){
    tableView.register(UINib(nibName: String(describing: CustomCell.self), bundle: nil), forCellReuseIdentifier: "customCell")
 }