Заполнение табличного представления в swift

Привет, я хочу заполнить эту таблицу configuration in the view

Я не использую представление статической таблицы, потому что я принимаю ошибку, и я решил использовать динамическое представление таблицы и отключить прокрутку в таблице. Вид таблицы используется только для информации:

  @IBOutlet var tableInfoQuake: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = quake.place


    tableInfoQuake.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))?.textLabel?.text = quake.place
    tableInfoQuake.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))?.textLabel?.text = "Mag: \(quake.mag)"
    tableInfoQuake.cellForRowAtIndexPath(NSIndexPath(forRow: 1, inSection: 0))?.textLabel?.text = "Cordinate: (\(quake.longitude),\(quake.latitude))"
    tableInfoQuake.cellForRowAtIndexPath(NSIndexPath(forRow: 1, inSection: 0))?.textLabel?.text = "Depth: \(quake.depth)"

но в представлении таблицы я ничего не вижу. Как я могу сделать? спасибо.

EDIT: я делаю это, чтобы изменить каждую строку:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->   UITableViewCell {
    var cellIdentifier = "quakeInfo"
    var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as UITableViewCell
    if indexPath == NSIndexPath(forRow: 0, inSection: 0){
        cell.textLabel!.text = quake.place
        cell.detailTextLabel!.text = "Mag: \(quake.mag)"
    }
    if indexPath == NSIndexPath(forRow: 1, inSection: 0){
      cell.textLabel!.text = "Cordinate: (\(quake.longitude),\(quake.latitude))"
        cell.detailTextLabel!.text = "Depth: \(quake.depth)"
    }

    return cell

}

Ответ 1

Oh TableViews...

Итак, вы хотите динамически заполнять таблицу. Ну... вот ты пойдешь мой друг:


Шаг 1. Внедрение DataSource

Хорошо... так что вы знаете, что такое протокол? Хорошо, если вы не... BAM, теперь вы делаете (не я в видео). DataSource - это то, что UITableView будет вызывать для извлечения данных, которые он должен отображать. Чтобы быть конкретным, рассматриваемый DataSource является UITableViewDataSource.

так...

    // change top to...

    class MyViewController:UIViewController, UITableViewDataSource

Это делает UITableViewDataSource необходимым для вашего ViewController. Затем вам нужно установить источник данных в UITableView. Так....

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.title = quake.place

        tableInfoQuake.datasource = self     
    }

Предположим, вы хотите добавить 7 ячеек в таблицу, и все 7 скажут "Hello Man". В этом примере я собираюсь сделать это самым худшим, но самым простым способом. если вы хотите, чтобы я углубился, просто напишите ниже, и я сделаю это лучше.

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 7
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->   UITableViewCell {
        let cell = UITableViewCell()
        let label = UILabel(CGRect(x:0, y:0, width:200, height:50))
        label.text = "Hello Man"
        cell.addSubview(label)
        return cell
    }

Итак, это для первого шага. Мы сказали таблице, что ViewController имеет то, что он ищет с точки зрения данных, и мы вернули данные для его использования.


Шаг 2. Реализация делегата

Как шаг 1, этот шаг начинается с добавления чего-то в начало...

    // change top to...

    class MyViewController:UIViewController, UITableViewDataSource, UITableViewDelegate

Затем, опять же, как верх, мы отредактируем функцию viewDidLoad()...

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.title = quake.place

        tableInfoQuake.datasource = self
        tableInfoQuake.delegate = self
    }

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

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 50
    }

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


Давайте все вместе

    class MyViewController:UIViewController, UITableViewDataSource, UITableViewDelegate {

        @IBOutlet var tableInfoQuake: UITableView!

        override func viewDidLoad() {
            super.viewDidLoad()

            tableInfoQuake.datasource = self
            tableInfoQuake.delegate = self
        }


        // UITableViewDataSource Functions

        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 7
        }

        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->   UITableViewCell {
            let cell = UITableViewCell()
            let label = UILabel(CGRect(x:0, y:0, width:200, height:50))
            label.text = "Hello Man"
            cell.addSubview(label)
            return cell
        }


        // UITableViewDelegate Functions

        func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
            return 50
        }        
    }

Удачи вам.

ZR

Ответ 2

Клетки в раскадровке являются прототипными ячейками. Это означает, что они фактически не находятся в представлении таблицы, но могут использоваться как шаблоны.

Чтобы заполнить таблицу, вам необходимо:

  • В раскадровке установите контроллер вида в качестве источника данных таблицы, перетащив соединение "источник данных" из меню соединений в виде таблицы на ваш контроллер представления.
  • Сделайте ваш контроллер просмотра совместимым с протоколом UITableViewDataSource.
  • В контроллере просмотра выполните следующие действия:
    • func tableView (tableView: UITableView, numberOfRowsInSection: Int) → Int
    • func tableView (tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) → UITableViewCell