UITableView не заполняется данными - PullRequest
0 голосов
/ 29 мая 2019

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

Я создал следующую структуру для моих данных:

struct feed {
  var title: String
  var subtitle: String
  var image: String
}

и вот я определил некоторые примерные данные:

var myfeed = [feed(title: "Test Feed", subtitle: "Welcome to feedFeed", image: "https://www.demo.com/imnage1.png"), feed(title: "Number 2", subtitle: "Demo?", image: "https://www.demo.com/imnage2.png")]

Я создал UITableView в своей раскадровке, настроил настраиваемую ячейку и использую идентификатор ячейки "LabelCell". Я создал отдельный файл cocoaTouchclass для класса UITableViewCell:

import UIKit

class ehappyTableViewCell: UITableViewCell {

    @IBOutlet weak var headlineTitleLabel: UILabel! 
    @IBOutlet weak var headlineTextLabel: UILabel!
    @IBOutlet weak var headlineImageView: UIImageView!

    override func awakeFromNib() {
       super.awakeFromNib()
       func tableView(_ tableView: UITableViewCell, heightForRowAt indexPath: IndexPath) -> CGFloat
           { 
              return 100.0;//Choose your custom row height
            }
         // Initialization code
    }    

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        // Configure the view for the selected state
    }

}

В моем файле ViewController у меня есть следующий код:

    @IBOutlet weak var table: UITableView!    

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

    func tableView(_ tableViwq: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell:ehappyTableViewCell = self.table.dequeueReusableCell(withIdentifier: "LabelCell", for: indexPath) as! ehappyTableViewCell!

        let headline = myfeed[indexPath.row]
        cell.headlineTitleLabel?.text = headline.title
        cell.headlineTextLabel?.text = headline.subtitle
        let urlWithoutHTTP = headline.image
        let httpAddition = "https:"
        let addition = "\(httpAddition)\(urlWithoutHTTP)"

        let url = URL(string: addition)

        DispatchQueue.global().async {
           let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
            DispatchQueue.main.async {
                cell.headlineImageView.image = UIImage(data: data!)
            }
        }
        return cell
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 140.0;//Choose your custom row height
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.table.delegate = self
        self.table.dataSource = self
    }

При запуске приложения таблица не будет заполнена образцами данных, которые я создал. Любые предложения о том, что я могу сделать?

Ответы [ 2 ]

0 голосов
/ 31 мая 2019
  • Если ваша ячейка xib , то вам необходимо зарегистрировать ячейку, написав следующий код в viewDidLoad

    self.table.register(UINib(nibName: "ehappyTableViewCell", bundle: nil), forCellReuseIdentifier: "LabelCell")

  • Если он спроектирован внутри контроллера представления в раскадровке, тогда не нужно регистрировать

  • Проверьте, заданы ли делегат и источник данных

  • Попробуйте заменить строку следующей строкой

    let cell = tableView.dequeueReusableCell(withIdentifier: "LabelCell") as? ehappyTableViewCell

0 голосов
/ 30 мая 2019

Вы получили неправильное написание для cellForRowAt метод

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

Правильный метод

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

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