didSelectRowAt indexPath: IndexPath - 总是返回之前的选择
didSelectRowAt indexPath: IndexPath - is always returning the previous selection
我有一个 UITableView,一个用于自定义单元格的自定义 class 和我的 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);
并且:
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
看来我自己也想不通
非常感谢!
从逻辑上讲,在 didSelectRowAt
中,我假设您应该直接从数据源 (model_firma
) 中读取所需数据,而不是获取单元格并从中读取:
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let currentModel = model_firma[indexPath.row]
labelSelectedCompany.text = currentModel.Denumire
}
边栏注释:
- 在Swift中,我们通常遵循驼峰式命名规则:
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")]
删除 ;
。
我有一个 UITableView,一个用于自定义单元格的自定义 class 和我的 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);
并且:
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
看来我自己也想不通
非常感谢!
从逻辑上讲,在 didSelectRowAt
中,我假设您应该直接从数据源 (model_firma
) 中读取所需数据,而不是获取单元格并从中读取:
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let currentModel = model_firma[indexPath.row]
labelSelectedCompany.text = currentModel.Denumire
}
边栏注释:
- 在Swift中,我们通常遵循驼峰式命名规则:
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")]
删除 ;
。