Таблица не отображается так, как раньше - PullRequest
0 голосов
/ 03 сентября 2018

Я только недавно установил последнюю версию Swift 4 и пытаюсь создать простую таблицу. Я помню, что когда вы используете данные из массива и хотите заполнить tableView данными из массива, вы переходите на cellForRowAt indexPath и делаете что-то вроде

var arrData = ["1", "2","3","4","5","6","7","8"]

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

    cell.textLbl.text = arrData[indexPath.row]

    return cell
}

и табличное представление будет в основном отображать все данные из arrData.

Теперь я вижу, что в табличном представлении отображается только первый объект в массиве. В этом случае он будет просто отображать 1 восемь раз. Я пытался найти что-то, чтобы решить эту проблему, но не было ничего, что могло бы решить эту проблему Затем я увидел учебник, в котором вместо него используются словари, поэтому я решил просто попробовать его.

Это простой класс, который я создал для использования в словаре:

import Foundation
import UIKit

class ArrayTest {
    var id: Int
    var name: String
    var phone: String

    init(id: Int, name: String, phone: String) {
        self.id = id
        self.name = name
        self.phone = phone
    }
}

Это мой viewController, у которого есть tableView:

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    @IBOutlet weak var tableView: UITableView!

    var tableArr: [ArrayTest] = [ArrayTest]()

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

    func populateArr() {
        let arrayTest1 = ArrayTest(id: 1, name: "Test1", phone: "111-111-1111")
        let arrayTest2 = ArrayTest(id: 2, name: "test2", phone: "222-222-2222")
        let arrayTest3 = ArrayTest(id: 3, name: "test3", phone: "333-333-3333")
        self.tableArr.append(arrayTest1)
        self.tableArr.append(arrayTest2)
        self.tableArr.append(arrayTest3)
    }

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

    func numberOfSections(in tableView: UITableView) -> Int {
        return tableArr.count
    }

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

        cell.textLbl.text = self.tableArr[indexPath.row].name

        return cell
    }
}

А это класс для tableViewCell:

import UIKit

class TableViewCell: UITableViewCell {
    @IBOutlet weak var textLbl: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
    }

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

        // Configure the view for the selected state
    }
}

Из прошлого опыта я помню, что это сработало бы, и все данные в словаре были бы помещены в tableView. Но теперь каждый раз, когда я делаю это, все, что я получаю, это повторение первого объекта, и в этом случае это будет «Test1».

enter image description here

Мне просто интересно, где я продолжаю идти не так, или что-то упускаю, или есть что-то новое для использования в Swift 4, о котором я не знаю.

1 Ответ

0 голосов
/ 03 сентября 2018

Что не так, эта часть

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


func numberOfSections(in tableView: UITableView) -> Int {
    return tableArr.count
}

Пожалуйста, измените его на

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


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

Если tableArr.count равен 3, ваш код в основном отображает 3 идентичных раздела, по одной строке в каждом разделе.

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