Как установить свойство UIImageView.image в UITableViewCell

#ios #swift

#iOS #swift

Вопрос:

У меня возникла проблема при попытке отобразить массив изображений в каждой ячейке для просмотра таблицы.

У меня есть отдельный TableViewCell файл Swift, в котором у меня есть UIImage ссылка на ячейку. Выход называется: CellVenueImage

По какой-то причине, когда я пытаюсь реализовать изображение на моем контроллере представления TableView, я получаю сообщение об ошибке: Value of type 'TableViewCell' has no member 'CellVenueImage'

Вот строка, в которой это происходит:

 cell.CellVenueImage.image = imagename
 

Использование Swift 3.

Вот код для представления таблицы:

 import UIKit

class VenueTableViewController: UITableViewController {


let VenueImageList = ["1970s.png","1980s.png","1990s.png"]

override func viewDidLoad() {
    super.viewDidLoad()


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Table view data source

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

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


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "VenueCell", for: indexPath) as! TableViewCell

    let imagename = UIImage(named: VenueImageList[indexPath.row])
    cell.CellVenueImage.image = imagename

    return cell
}
 

Код tableViewCell:

 import UIKit

class VenuesTableViewCell: UITableViewCell {

@IBOutlet weak var CellVenueImage: UIImageView!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}
 

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

1. пожалуйста, код для tableViewCell

2. @zombie Добавил, спасибо!

Ответ №1:

Ошибка в том, что вы не используете созданный TableViewCell вами подкласс, вы используете обычный UITableViewCell .

 let cell = tableView.dequeueReusableCell(withIdentifier: "VenueCell", for: indexPath) as! TableViewCell
 

Вам нужно использовать его в качестве подкласса UITableViewCell.

Если оно называется «VenuesTableViewCell», например: class VenuesTableViewCell: UITableViewCell { , затем приведите его как VenuesTableViewCell.

 let cell = tableView.dequeueReusableCell(withIdentifier: "VenueCell", for: indexPath) as! VenuesTableViewCell
 

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

1. Это исправлено! Большое вам спасибо.

2. Исправление было следующим: пусть cell = TableView.dequeueReusableCell(с идентификатором: «VenueCell», для: indexPath) как! VenuesTableViewCell вместо: as! VenueCell

3. Да, это было то, что я пытался вам сказать с объяснением 🙂 Рад помочь

4. Странно, теперь, когда я пытаюсь получить доступ к Tableview через панель вкладок, я получаю сообщение об ошибке signal SIGABRT: *** Завершение работы приложения из-за неперехваченного исключения ‘NSInternalInconsistencyException’, причина: ‘невозможно удалить из очереди ячейку с идентификатором VenueCell — необходимо зарегистрировать перо или класс для идентификатора или подключитьпрототип ячейки в раскадровке ‘

5. @Miles Не забудьте принять ответ, если он был полезен 😉

Ответ №2:

 let cell = tableView.dequeueReusableCell(withIdentifier: "VenueCell", for: indexPath) as! VenuesTableViewCell