didSelectRowAt indexPath: IndexPath - всегда возвращает предыдущий выбор - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть UITableView, пользовательский класс для пользовательской ячейки и мой Swift ViewController:

private var model_firma = [Firme]()
var firme = Firme(IDFirma: 1, Denumire: "ZZZZZ", Reprezentant: "JohnDoe")
    model_firma.append(firme);
    firme = Firme(IDFirma: 2, Denumire: "YYYYYYY", Reprezentant: "JohnDoe")
    model_firma.append(firme);

И:

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

public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let cell = tableView.cellForRow(at: indexPath) as! FirmeTableViewCell
        let item = cell.labelDenumire
        labelSelectedCompany.text = item?.text
}

Элементы отображаются правильно.Но, при первом нажатии на табличку, ни на одном предмете ничего не происходит.На втором клике ||При выборе другого элемента восстанавливается предыдущий элемент.

Функция, которую я использую для добавления строк в UITableView с использованием данных из модели:

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

let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath) as! FirmeTableViewCell
let text = model_firma[indexPath.row]

cell.labelDenumire.textColor = UIColor(rgb: 0xffffff)
cell.labelDenumire.text = text.Denumire

Кажется, что я могу 'Я сам это не понял.

Большое спасибо!

1 Ответ

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

Логически, в didSelectRowAt я бы предположил, что вы должны читать нужные данные из источника данных (model_firma) напрямую, а не получать ячейку и читать из нее:

public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let currentModel = model_firma[indexPath.row]
    labelSelectedCompany.text = currentModel.Denumire
}

Примечания к боковой панели:

  • В Swift мы обычно соблюдаем соглашение о верблюдах *1013*:
    • modelFirma вместо model_firma.
    • имена переменных должны начинаться с маленькой буквы : denumire вместо Denumire.

Вместо:

private var model_firma = [Firme]()
var firme = Firme(IDFirma: 1, Denumire: "ZZZZZ", Reprezentant: "JohnDoe")
    model_firma.append(firme);
    firme = Firme(IDFirma: 2, Denumire: "YYYYYYY", Reprezentant: "JohnDoe")
    model_firma.append(firme);

предпочтительно, должно быть так:

private var firmes = [Firme(IDFirma: 1, Denumire: "ZZZZZ", Reprezentant: "JohnDoe"),
                      Firme(IDFirma: 2, Denumire: "YYYYYYY", Reprezentant: "JohnDoe")]

с удалением ;.

...