Ячейки UITableView не отображаются - PullRequest
0 голосов
/ 07 октября 2018
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 для отображения информации, и у меня есть пользовательский UITableViewCell под названием «CustomCell», который я использую для отображения информации в табличном представлении.Однако, когда я запускаю этот код, на экране ничего не появляется.Я также добавил некоторые операторы печати в метод 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 code.

Я не уверен, что делаюнеправильно.Все помощь приветствуется

Спасибо заранее!

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Добавление этих двух строк - правильный путь:

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

Ваш журнал аварийных сбоев указывает вам правильное направление.У вас нет xib-файла с именем «CustomCell».

Если вы не используете отдельный xib-файл для UITableViewCell, то вам нужно установить правильный класс и идентификатор для вашей ячейки враскадровки.Если вы установите его в раскадровке, вам не нужно регистрировать xib для табличного представления.

Регистрируйте nib, только если вы используете отдельные файлы для своих ячеек табличного представления.

0 голосов
/ 07 октября 2018

Похоже, что метод регистрации не найти правильный Nib.Возможно, имя или идентификатор неверны.Вы можете использовать что-то вроде этого:

func registerCell(){
    tableView.register(UINib(nibName: String(describing: CustomCell.self), bundle: nil), forCellReuseIdentifier: "customCell")
 }
0 голосов
/ 07 октября 2018

Я выполнил следующие шаги и исправил ошибку:

  1. Откройте файл XIB, вызывающий проблемы
  2. Нажмите на значок владельца файла на левой панели (вверху, выглядит каквыделенное желтым цветом поле)
  3. Если вы не видите правую боковую панель, нажмите на третий значок над «видом» на панели инструментов.
  4. Это покажет правую боковую панельВ правой боковой панели нажмите на третью вкладку - ту, которая выглядит как газета. В разделе «Пользовательский класс» вверху убедитесь, что Class - это имя ViewController, которое должно соответствовать этому представлению.
  5. Если нет, введите его. На боковой панели справа щелкните последнюю вкладку - ту, которая выглядит как круг со стрелкой на ней. Вы должны увидеть «розетки» с «видом» под ней.
  6. Перетащите кружок рядом с ним к значку «Вид» на левой панели (нижний выглядит как белый квадрат с толстым серым контуром.

Сохраните XIB и повторноработать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...