【问题标题】:How to iterate a for loop in table view cell swift如何在表格视图单元格中快速迭代for循环
【发布时间】:2018-04-26 12:51:10
【问题描述】:

我试过这个但没用Iterate over all the UITableCells given a section id 我只需要在单元格中迭代一个 for 循环并计算值并显示在另一个标签计算值或打印我不知道该怎么做。任何帮助都会很棒!我只有单元格的值我看到底部的单元格没有计算值。当我向上滚动时,我得到了单元格值,但顶部的单元格值无法查看或计算。

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
  let news = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return news.count
  }

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

    let cell = myTableView.dequeueReusableCell(withIdentifier: "mycellTVC") as! mycellTVC
    cell.lbl.text = news[indexPath.row]

    return cell
  }


  func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 80
  }

  @IBOutlet weak var myTableView: UITableView!

  override func viewDidLoad() {
    super.viewDidLoad()
    myTableView.delegate = self
    myTableView.dataSource = self

  } 
}
 **This is my cell file**
class mycellTVC: UITableViewCell{

  @IBOutlet weak var lbl: UILabel!
  @IBOutlet weak var calculated_value: UILabel!
}

【问题讨论】:

  • 我在您的代码中看不到任何计算。你想达到什么目标?
  • 你是要实现新闻的添加吗?
  • 请检查我是否已编辑,当我的单元格位于下方且无法计算其值时会产生问题
  • 你能澄清一下你的目标是什么吗?表格视图只有一个部分包含 news.count 作为行数,并且您的代码到目前为止应该可以正常工作...
  • 为了更清楚,我想通过使用 for 循环为所有 10 行打印或另一个标签添加标签中的所有值。

标签: ios arrays swift uitableview


【解决方案1】:

您尝试做的基本操作是从数据源中获取一个值,如果需要将其转换为一个数字,然后将它们加起来。

对于您上面的示例,这可以解决问题:

let news = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]

let total = news.map({ Int($0)! }).reduce(0) { x, y in
    return x + y
}

print(total) // 55

要对购物车执行此操作,您的数据源可能是产品列表,可能类似于:

struct Product
{
    var name: String
    var price: Int
    var quantity: Int
}

let prod1 = Product(name: "Coka Cola", price: 2, quantity: 2)
let prod2 = Product(name: "Bread", price: 1, quantity: 1)
let prod3 = Product(name: "Sweets", price: 2, quantity: 4)

let shoppingCart = [prod1, prod2, prod3]

let total = shoppingCart.reduce(0) { x, y in
    return x + (y.price * y.quantity)
}

print(total) // 13

原理相同,只是稍微复杂一点。只要你的数据结构是正确的,它应该是直截了当的

【讨论】:

  • 成功了,谢谢。例如,如果我有 3 个文本字段,例如每行中的名称 A、B、C 和 10 行,我会感到困惑。我正在执行一些计算 A*B 结果存储在 C 中。我从 API 向 B 传递值,但是在编辑 B 之后,当我向上和向下滚动时,它给出的值与我从 API 获得的值相同。如何附加实时编辑值并将其传递给文本字段
  • 当您更改任何值时,您应该更新基础数据。集合/表格视图中的单元格可以在不在视图中时重复使用。因此,例如,如果您有大单元格,则屏幕上可能只能容纳 5 个。您可能只加载了 5 个,也许是 6 个。因此,如果您更新单元格中的值,然后将其卸载并重用于另一个单元格。然后你会丢失你的数据。所以总是依赖数据而不是用户界面
  • 谢谢。我尝试使用数据在表格视图单元格中运行 for 循环以获取我的表格视图屏幕一次仅适合 2 个单元格的所有数据,而其他单元格位于下方。所以我得到了前 2 个单元格的数据,对于下面的其他单元格,我得到“NIL”我尝试了很多解决方案但没有奏效
  • 你不能从不可见的单元格中获取数据(你可以......但你真的,真的不应该)使用底层数据。您根据数据按需创建一个单元格,如果您更新单元格中的数据,则也要更新数据。总是对数据进行计算,而不是单元格本身
  • 查看此答案以了解如何在编辑后更新数据:stackoverflow.com/questions/32669759/…