Пользовательская ячейка в табличном представлении не отображается? - PullRequest
0 голосов
/ 21 марта 2020

У меня проблемы с отображением пользовательских ячеек в виде таблицы. Я удостоверился, что установил идентификатор повторного использования ячеек в раскадровке и подключил свои IBOutlets к моим ярлыкам ячеек, но показываются только ячейки по умолчанию, а не мои собственные. Вот код для моего контроллера табличного представления и ниже для моей ячейки табличного представления:

class HoursTableViewController: UITableViewController {

    @IBOutlet var hourDonationSegmentedButton: UISegmentedControl!
    @IBOutlet var addEntryButton: UIButton!
    @IBOutlet var editEntryButton: UIButton!

    var hoursEntries = [HoursEntry]()
    var dummyData : [HoursEntryTest] = [HoursEntryTest(hours: 1, minutes: 30, entryTitle: "title", organization: "unicef", content: "content", date: Date(timeIntervalSinceNow: 0))]
    let cellReuseIdentifier = "HoursTableViewCell"

    override func viewDidLoad() {
        super.viewDidLoad()
        prepareTableView()
    }

    func prepareTableView() {
        self.tableView.dataSource = self
        self.tableView.delegate = self
        self.tableView.register(HoursTableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
    }


}

    extension HoursTableViewController {

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

        }

        override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            var cell : HoursTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) as! HoursTableViewCell
            let hoursEntry = dummyData[indexPath.row]
            cell = setCellTextFromHoursEntry(currentCell: cell, hoursEntry: hoursEntry)

            return cell
        }

        override func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        }

        func setCellTextFromHoursEntry(currentCell: HoursTableViewCell, hoursEntry: HoursEntryTest) -> HoursTableViewCell {
            currentCell.entryTitleLabel!.text = hoursEntry.entryTitle;
            currentCell.organizationLabel!.text = hoursEntry.organization;
            currentCell.dateLabel!.text = "placeholder date"
            currentCell.hourLabel!.text = String(hoursEntry.hours);
            currentCell.minuteLabel!.text = String(hoursEntry.minutes);

            return currentCell;
        }
}
class HoursTableViewCell : UITableViewCell {

    @IBOutlet var entryTitleLabel: UILabel! = {
        let label = UILabel()
        return label
    }()

    @IBOutlet var organizationLabel: UILabel! = {
        let label = UILabel()
        return label
    }()

    @IBOutlet var dateLabel: UILabel! = {
        let label = UILabel()
        return label
    }()

    @IBOutlet var hourLabel: UILabel! = {
        let label = UILabel()
        return label
    }()

    @IBOutlet var minuteLabel: UILabel! = {
        let label = UILabel()
        return label
    }()

Я ценю помощь!

1 Ответ

0 голосов
/ 21 марта 2020

Если вы создаете пользовательскую ячейку из файла Nib, вы должны определить ячейку следующим образом:

tableView.register(UINib(nibName: "HoursTableViewCell", bundle: nil), forCellReuseIdentifier: cellReuseIdentifier)

другая точка:

Если вы используете файл пера для вашего Пользовательская ячейка и установка IBOutlet, нет необходимости определять ваши элементы как

@IBOutlet var entryTitleLabel: UILabel! = {
        let label = UILabel()
        return label
    }()

, вам просто нужно установить @IBOutlet var entryTitleLabel: UILabel!

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