我有一个tableView
转换器应用程序,其中包含包含转换结果的单元格。
例如,您输入5公里,并且在tableView
的“仪表”单元中显示5000,依此类推。
当我按下一个单元格时,我想使UIAlert
获得完整的结果。
因此,我想查看我的仪表结果,然后按一下仪表单元。我该怎么做?
我尝试制作其他变量并将其连接到Alert,但是该值仍未显示我选择的单元格,而是当前显示的表中的第一个单元格...
有人有想法吗?
let cell1 = tableView.dequeueReusableCell(withIdentifier: "resultCell") as! ResultTableViewCell
let item = converter[indexPath.row]
cell1.nameResult.text = item.title
cell1.subtitleResult.text = item.subtitle
//MARK: - Форматтер для результатов
let formatter = NumberFormatter()
formatter.locale = Locale.current
formatter.numberStyle = .decimal
formatter.minimumFractionDigits = 3
formatter.maximumFractionDigits = maxdigits
if converterVal == NSLocalizedString("Километр", comment: "") {
cell1.labelResult.text = formatter.string(from: NSDecimalNumber(value: inputValue).multiplying(by: NSDecimalNumber(value: item.kfKilometer)))
resultVar = cell1.labelResult.text!
resultName = cell1.nameResult.text!
return cell1
} else if converterVal == NSLocalizedString("Метр", comment: "") {
cell1.labelResult.text = formatter.string(from: NSDecimalNumber(value: inputValue).multiplying(by: NSDecimalNumber(value: item.kfMeter)))
resultVar = cell1.labelResult.text!
resultName = cell1.nameResult.text!
return cell1
} else {
cell1.labelResult.text = formatter.string(from: NSDecimalNumber(value: 0))
return cell1
}
nameResult
-是转换后的值的名称
和labelResult
-是转换的结果
对于每个单元格,我都有if else
语句。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if tableView == self.tableView2 {
let alertController = UIAlertController(title: NSLocalizedString("\(inputValue) \(detailLabel) is:", comment: ""), message: NSLocalizedString("\(resultVar) \(resultName)", comment: ""), preferredStyle: .alert)
let OKAction = UIAlertAction(title: NSLocalizedString("Спасибо", comment: ""), style: .default) { action in
// ...
}
alertController.addAction(OKAction)
self.present(alertController, animated: true) {
// ...
}
}
// tableView.deselectRow(at: indexPath, animated: true)
}
我想在Alert中更紧密地显示此标签,但仅对于每个单元格,它都必须是自己的...
答案 0 :(得分:0)
也许您需要像下面那样修改您的方法
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if tableView == self.tableView2 {
// get your selected row data
let item = converter[indexPath.row]
//use item.title or item.subtitle instead of label
let alertController = UIAlertController(title: NSLocalizedString("\(inputValue) \(detailLabel) is:", comment: ""), message: NSLocalizedString("\(resultVar) \(resultName)", comment: ""), preferredStyle: .alert)
let OKAction = UIAlertAction(title: NSLocalizedString("Спасибо", comment: ""), style: .default) { action in
// ...
}
alertController.addAction(OKAction)
self.present(alertController, animated: true) {
// ...
}
}
}
让我解释一下:cellForRowAt indexPath
此方法将创建单元格并填充您传递的数据。因此,如果您通过这种方法分配值resultVar
,则会给您错误的值。
didSelectRowAt
是在您单击单元格行时调用的,因此请在此方法中分配值resultVar
并执行操作或进行任何操作
单击行时改为访问单元格
if let cell = tableView.cellForRow(at: indexPath) as? YourCellClass {
// access your cell label and get values
print(cell.titleLable.text!)
}