Вы заявляете, что не используете раскадровку, но объявили свою собственность tableView
как точку продаж. Не делай этого. Розетки предназначены только для раскадровок.
На самом деле вы никогда не создаете экземпляр UITableView
и не присваиваете его свойству tableView
. Вот почему вы получаете сбой при попытке получить доступ к неявно развернутому необязательному элементу, который nil
.
У вас также есть UIViewController
. Почему бы не использовать UITableViewController
и сэкономить много работы?
Вам также необходимо зарегистрировать свой класс ячейки.
Также обратите внимание, что стандартно начинать имена классов, структур и перечислений заглавными буквами. Имена переменных, функций и регистра начинаются со строчных букв.
Ваш код должен быть:
class SettingsViewController: UITableViewController {
let elements = ["horse", "cat", "dog", "potato","horse", "cat", "dog", "potato","horse", "cat", "dog", "potato"]
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(CustomTableViewCell.self, forCellReuseIdentifier: "customCell")
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return elements.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell
cell.cellView.layer.cornerRadius = cell.cellView.frame.height / 2
cell.animalLbl.text = elements[indexPath.row]
cell.animalImage.image = UIImage(named: elements[indexPath.row])
cell.animalImage.layer.cornerRadius = cell.animalImage.frame.height / 2
return cell
}
}
Еще одна вещь, которую следует рассмотреть. Поскольку вы делаете все строки одинаковой высоты, было бы более эффективно удалить реализацию метода heightForRowAt
и добавить следующую строку в viewDidLoad
:
tableView.rowHeight = 100