Swift TableView в ViewController В VC Navigation на панели вкладок: ячейки не будут заполняться данными из списка

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

            import Foundation
            import UIKit

            class ThirdViewController: UIViewController {

                let tableData = ["One","Two","Three"]

                override func viewDidLoad() {
                    super.viewDidLoad()
                    // Do any additional setup after loading the view, typically from a nib.
                    navigationController?.navigationBar.barTintColor = hexStringToUIColor(hex: "#00a5ff")
                    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont(name: "Futura", size: 25)!]
                    self.title = "Interests"
                }

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

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

                    let cell:UITableViewCell = UITableViewCell(style:UITableViewCellStyle.default, reuseIdentifier:"Cell")

                    cell.textLabel?.text = tableData[indexPath.row]

                    return cell
                }

                func hexStringToUIColor (hex:String) -> UIColor {
                    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()

                    if (cString.hasPrefix("#")) {
                        cString.remove(at: cString.startIndex)
                    }

                    if ((cString.characters.count) != 6) {
                        return UIColor.gray
                    }

                    var rgbValue:UInt32 = 0
                    Scanner(string: cString).scanHexInt32(&rgbValue)

                    return UIColor(
                        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
                        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
                        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
                        alpha: CGFloat(1.0)
                    )
                }
            }

3 ответа

Вам необходимо настроить свой контроллер представления в качестве источника данных и вызвать reloadData для вашего табличного представления.

override func viewDidLoad() {
  super.viewDidLoad()
  // Do any additional setup after loading the view, typically from a nib.
  navigationController?.navigationBar.barTintColor = hexStringToUIColor(hex: "#00a5ff")
  navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont(name: "Futura", size: 25)!]
  self.title = "Interests"

  yourTableView.dataSource = self

  yourTableView.reloadData()
}

Вау, в этом коде так много ошибок...

Первый

Где находится свойство UITableView? Вы должны объявить

@IBOutlet weak var tableView: UITableView!

и подключите его к табличному представлению на раскадровке (или в файле.xib)

второй

Вы должны принять оба протокола табличного представления.

UITableViewDatasource а также UITableViewDelegate

В третьих

Установите ViewController в качестве делегата

tableView.delagate = selftableView.datasource = self

четвертый

Как уже упоминалось выше, вам необходимо реализовать func numberOfSections

источник данных требуется метод.

пятый

Все должно работать. Если нет, прочитайте немного о UITableView. Потому что я вижу, что вы не снимаете с ячеек на cellForRowAtIndexPath метод.

С уважением

Вам также необходимо реализовать метод dataSource "numberOfSections":

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

Кроме этого, вам нужно пометить свой класс ThirdViewController как UITableViewDataSource и установить для свойства dataSource tableView значение self:

ThirdViewController: UIViewController, UITableViewDataSource
{
     override func viewDidLoad() {
     super.viewDidLoad()
     ........
     yourTableView.dataSource = self


}
Другие вопросы по тегам