UITableView с пользовательским классом ячеек, показывающим правильное количество строк, но все пустые

#ios #swift #xcode #uitableview

#iOS #swift #xcode #uitableview

Вопрос:

Кажется, я не могу понять, почему все ячейки пусты в моей таблице с пользовательскими ячейками. Я некоторое время искал и пробовал предложения, но не могу понять это. На данный момент я чувствую, что упускаю что-то очевидное

Это мой .swift

 import UIKit

struct Contact {

    var name:String
    var title:String
    var phone:String

}

class ContactTableViewCell: UITableViewCell {

    @IBOutlet weak var contactName: UILabel!
    @IBOutlet weak var contactTitle: UILabel!
    @IBOutlet weak var contactPhone: UILabel!

}

class Contacts:UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var contactTable: UITableView!

    var contactData = [
        Contact(name: "Main Office", title: "Title", phone: "Phone Here"),
        Contact(name: "Joe Bloggs", title: "Title Here", phone: "Phone Number"),
        Contact(name: "John Smith", title: "Another Title", phone: "Another Phone")
    ]

    override func viewDidLoad() {
        super.viewDidLoad()

        contactTable.register(ContactTableViewCell.self, forCellReuseIdentifier: "cellId")
        contactTable.delegate = self
        contactTable.dataSource = self

    }

    func tableView(_ contactTable: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.contactData.count
    }

    func numberOfSectionsInTableView(contactTable: UITableView) -> Int {
        return 1
    }

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

        let contactCell = contactTable.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! ContactTableViewCell

        let contact = contactData[indexPath.row]

        contactCell.contactName?.text = contact.name
        contactCell.contactTitle?.text = contact.title
        contactCell.contactPhone?.text = contact.phone

        return contactCell

    }

}
  

Мои IBOutlets определенно связаны, а ячейка связана с ContactTableViewClass

введите описание изображения здесь

Вот как выглядит моя ячейка

введите описание изображения здесь

Любая помощь будет принята с благодарностью, спасибо

Ответ №1:

Прокомментируйте эту строку

 contactTable.register(ContactTableViewCell.self, forCellReuseIdentifier: "cellId")
  

И установите идентификатор cellId ячейки в IB, когда вы создаете прототип ячейки, не регистрируйте ее, так как регистрация происходит автоматически

В вашем случае все выходы равны нулю

 // try contactCell.contactName.text and it' ll crash
contactCell.contactName?.text = contact.name
contactCell.contactTitle?.text = contact.title
contactCell.contactPhone?.text = contact.phone
  

Когда вы переопределяете регистрацию IB в классе, макет которого создается в IB, как ContactTableViewCell.self есть, когда вы полностью создаете класс с его макетом программно

Комментарии:

1. Ну, черт возьми, в конце концов, это было что-то настолько простое. Спасибо. Я не могу поверить, что весь этот поиск не привел к этому