自定义TableViewController生成空白单元格

时间:2017-07-12 06:06:23

标签: swift list tableview cells

我一直在跟随Apple的Swift教育书,我正在创建一个ToDo列表。我创建了自己的,遇到了这个问题,所以我把所有的代码都撕掉了,直到我得到了一个精确的副本,排成一行的Apple。

使用我的TableViewController子类生成空白单元格。

class ToDoTableViewController: UITableViewController {
    var todos = [ToDo]()

在我的TableViewController(在故事板中链接)中,有两个覆盖;一个出队,另一个将一个部分中的行数返回到所有行。

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

override func tableView(_ tableView: UITableView, cellForRowAt
    indexPath: IndexPath) -> UITableViewCell {
    guard let cell =
        tableView.dequeueReusableCell(withIdentifier:
            "ToDoCellIdentifier") else {
                fatalError("Could not dequeue a cell")
    }

    let todo = todos[indexPath.row]
    cell.textLabel?.text = todo.title
    return cell
}

然后使用viewDidLoad覆盖,以便我可以插入样本项。

override func viewDidLoad() {
    super.viewDidLoad()

    if let savedToDos = ToDo.loadToDos() {
        todos = savedToDos
    } else {
        ToDo.loadSampleToDos()
    }
}

Xcode表示这些未被使用。

我的其他文件是ToDo类,包括标题,截止日期等以及我的示例数据:

class ToDo: NSObject {

    var title: String
    var isComplete: Bool
    var dueDate: Date
    var notes: String?

init(title: String, isComplete: Bool, dueDate: Date, notes:
    String?) {

    guard !title.isEmpty else {
        fatalError("Reminder requires a non-empty title")
    }

    self.title = title
    self.isComplete = isComplete
    self.dueDate = dueDate
    self.notes = notes
}

文件中的示例数据:

static func loadSampleToDos() -> [ToDo] {
    let todo1 = ToDo(title: "ToDo One", isComplete: false,
                     dueDate: Date(), notes: "Notes 1")
    let todo2 = ToDo(title: "ToDo Two", isComplete: false,
                     dueDate: Date(), notes: "Notes 2")
    let todo3 = ToDo(title: "ToDo Three", isComplete: false,
                     dueDate: Date(), notes: "Notes 3")

    return [todo1, todo2, todo3]
}

我在故事板中将单元格标识符设置为“ToDoCellIdentifier”。

运行它,只有空白单元格。他们为什么空白?

1 个答案:

答案 0 :(得分:0)

试试这个。

override func viewDidLoad() {
    super.viewDidLoad()

    if let savedToDos = ToDo.loadToDos() {
        todos = savedToDos
    } else {
        todos = ToDo.loadSampleToDos()
    }
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return todos.count
}