Ios didSelectRowAt indexPath:indexPath-始终返回上一个选择

Ios didSelectRowAt indexPath:indexPath-始终返回上一个选择,ios,swift,uitableview,didselectrowatindexpath,Ios,Swift,Uitableview,Didselectrowatindexpath,我有一个UITableView,一个自定义单元格的自定义类和我的ViewController swift: private var model_firma = [Firme]() var firme = Firme(IDFirma: 1, Denumire: "ZZZZZ", Reprezentant: "JohnDoe") model_firma.append(firme); firme = Firme(IDFirma: 2, Denumire: "YYYYYYY", Repr

我有一个UITableView,一个自定义单元格的自定义类和我的ViewController swift:

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);
以及:

项目显示正确。 但是,在第一次单击tableview时,在任何项目上都不会发生任何事情。在另一个项目上第二次单击| |选择时,将检索上一个项目

我用于使用模型中的数据向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
看来我自己也弄不明白

多谢各位

从逻辑上讲,在didSelectRowAt中,我假设您应该直接从数据源模型公司读取所需数据,而不是获取单元格并从中读取:

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

在Swift中,我们通常遵循camel案例命名约定: 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")]

通过删除

为什么要引用单元格,然后从标签文本中获取值?为什么不直接从数组中获取值?同样的情况也会发生,我以这种方式获取值是为了调试。1。首先我选择了ZZZZ公司,什么都没发生。2.然后我选择公司名称yyyyyy。我点击公司yyyyyy我得到之前选择的ZZZZZZ。。。诸如此类,诸如此类,我得到的是上一个选定的项目,而不是实际选定的项目。您问题中的代码是您的真实代码吗?复制并粘贴到您的问题中?您描述的行为听起来像是您在代码中错误地实现了DidDecelosRowat。但是你正确发布的内容显示了didSelectRowAt。谢谢你的提示@OvidiuMuntean你确定model_firma没有被编辑或其他什么吗?尝试调试didSelectRowAt方法中发生的事情。Ahmad,谢谢!public func tableView\uutableview:UITableView,didSelectRowAt indexPath:indexPath{let currentModel=model\u firma[indexPath.row]labelSelectedCompany.text=currentModel.Denumire}按预期工作!
private var firmes = [Firme(IDFirma: 1, Denumire: "ZZZZZ", Reprezentant: "JohnDoe"),
                      Firme(IDFirma: 2, Denumire: "YYYYYYY", Reprezentant: "JohnDoe")]