- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 View Controller 中有一个 TableView
,在 UIViewController
中也有一个 UILabel
。一切都显示得很好,但我正在努力实现某些目标,但我不能简单地了解其背后的逻辑。
tableview 单元格有一个 UILabel,它在单元格上有 Int
值,这些数字现在不同 我如何获得 tableView 单元格中标签上的数字总和并显示在标签中 View Controller 。
我已经尝试在 UIView Controller 中创建一个变量并将这个值添加到 t 但我无法这样做,因为我无法将这个数字加在一起
有关如何执行此操作的任何帮助。谢谢
var total: Double?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.section {
case 0:
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! BrokageCheckoutCell
cell.configure()
total = Double("\(cell.subPrice.text!)")
cell.selectionStyle = .none
return cell
case 1:
let cell = tableView.dequeueReusableCell(withIdentifier: cellId2, for: indexPath) as! OtherCheckoutCell
cell.configure()
cell.selectionStyle = .none
return cell
default: break
}
return UITableViewCell()
}
最佳答案
你问:
how do I get the sum of the numbers on the Label in the tableView cell and display on the Label in the view controller
简而言之,你不知道。表格 View 单元格(“ View ”的一部分)中的标签不是我们的数据源。它仅用于显示单个字符串。
例如,假设您的应用有 100 个项目要求和,但应用的表格 View 一次只显示 12 行。作为内存和性能的改进,iOS 将重用滚动出 View 的单元格,以便显示滚动到 View 中的新行的内容。但这意味着你不能说“将这 100 个单元格中标签的所有内容相加”,因为没有 100 个单元格;只有 12 个。
您的应用程序应该引用它的“模型”,cellForRowAt
用来确定在给定的表格 View 单元格中显示什么的结构(例如,数组)。因此,如果您想求和一个总计,您应该将该数组中的值相加,而不是引用所有单元格。
如果您的单元格具有允许修改数据的控件,那么该单元格应该启动模型的更新。然后,计算总计(对数组中的值求和)的过程仍然有效。
那么,让我们考虑一个例子:
您应该有一个包含要求和的数字的模型。你的例子有点不清楚,所以我将创建一个例子,其中每个表行包含一个名称、一个单价和一个数量:
struct Item {
let name: String
let unitPrice: Decimal
var quantity: Decimal
}
在此示例中,任何给定行的总计将是数量乘以单价。所有行的总计将是所有这些产品的总和。
那么你的 View Controller 可能有一个数组用于它的模型:
var items: [Item] = ...
然后,当您想要更新总计标签时,您只需使用一种方法来计算每行总计的数量乘以价格,然后将这些值相加以计算总计。然后它将相应地更新总计文本字段:
private extension ViewController {
func updateTotal() {
let total = items
.map { $0.quantity * $0.unitPrice }
.reduce(0, +)
totalLabel.text = totalFormatter.string(for: total)
}
}
请注意,我不是从单元格中检索这些数字(因为它们可能会被重复使用),而是从模型中检索我需要的所有数据。
不过,这里的关键是,例如,如果您的单元格允许用户更改其中一个值,则您需要一种机制来更新 TableView Controller 的模型。我们将为此使用一个协议(protocol):
protocol ItemCellDelegate: class {
func cell(_ cell: ItemCell, didUpdateQuantity quantity: Decimal)
}
class ItemCell: UITableViewCell {
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var quantityTextField: UITextField!
@IBOutlet weak var unitPriceLabel: UILabel!
static let quantityFormatter: NumberFormatter = ...
static let priceFormatter: NumberFormatter = ...
weak var delegate: ItemCellDelegate?
}
显然,当您配置单元格时, View Controller 将指定用于更新文本字段(或其他内容)的委托(delegate):
// MARK: Public methods
extension ItemCell {
func configure(name: String, quantity: Decimal, unitPrice: Decimal, delegate: ItemCellDelegate) {
self.delegate = delegate
nameLabel.text = name
quantityTextField.text = ItemCell.quantityFormatter.string(for: quantity)
unitPriceLabel.text = ItemCell.priceFormatter.string(for: unitPrice)
}
}
当 ItemCell
获得更新时,它只调用委托(delegate):
// MARK: Private methods
private extension ItemCell {
@IBAction func didUpdateQuantity(_ sender: UITextField) {
var quantity: Decimal?
if let text = sender.text, let value = ItemCell.quantityFormatter.number(from: text) {
quantity = value.decimalValue
}
delegate?.cell(self, didUpdateQuantity: quantity ?? 0)
}
}
然后,当 View Controller 配置单元格时,它将自己提供为委托(delegate):
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) as! ItemCell
let item = items[indexPath.row]
cell.configure(name: item.name, quantity: item.quantity, unitPrice: item.unitPrice, delegate: self)
return cell
}
}
当然, View Controller 将遵守该协议(protocol)以接受对文本字段的更新并更新模型:
extension ViewController: ItemCellDelegate {
func cell(_ cell: ItemCell, didUpdateQuantity quantity: Decimal) {
guard let indexPath = tableView.indexPath(for: cell) else { return }
items[indexPath.row].quantity = quantity
updateTotal()
}
}
而且,如您所见,如果可以的话,在更新模型后,它也可以自动更新总数。
这里的关键是我们从不将单元格用作我们保存数据的地方。这些单元格仅用于 (a) 显示数据和 (b) 通知 View Controller 是否需要注意任何更新。
我们努力实现责任的明确分离,其中“ View ”用于显示当前屏幕上的控件并与之交互,而“模型”包含我们所有的数据。
关于ios - 快速求和 UITableView 单元格上的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56717127/
我正在尝试在 OCaml 中创建一个函数,该函数在数学中执行求和函数。 我试过这个: sum n m f = if n = 0 then 0 else if n > m then f
我正在尝试找到一个可以帮助我解决问题的公式。 这个公式应该对每个靠近(总是在左边)具有相同名称的单元格的单元格求和(或工作)。如下所示: 将每个大写字母视为 “食谱”并且每个小写字母为 “成分” .在
让它成为以下 python pandas DataFrame,其中每一行代表一个人在酒店的住宿。 | entry_date | exit_date | days | other_columns
我有显示客户来电的数据。我有客户号码、电话号码(1 个客户可以有多个)、每个语音调用的日期记录以及调用持续时间的列。表看起来如下示例。 CusID | PhoneNum | Date
让它成为以下 python pandas DataFrame,其中每一行代表一个人在酒店的住宿。 | entry_date | exit_date | days | other_columns
我得到了两列数据; 答: 2013年12月31日 2013年12月30日 2013年12月29日 2013年12月28日 2013年12月27日 2012年12月26日 B: 10 10 10 10
我对 double 格式的精度有疑问。 示例: double K=0, L=0, M=0; scanf("%lf %lf %lf", &K, &L, &M); if((K+L) 我的测试输入: K
我有以下数组: int[,] myArray1 = new int[2, 3] { { 1, 2, 3 }, { 4, 6, 8 } }; int[,] myArray2 = new int[2, 3
我需要有关报告查询的帮助。我在该方案的底部有一个发票表,需要一种方法来获取总计费金额,同时在此数据库方案中的较高点进行条件过滤。我需要加入其他表,这会导致 SUM 函数返回不需要的结果。 这是我正在使
我有一个使用innodb作为存储引擎的MySQL数据库,并且我有许多采用基本形式的查询: SELECT bd.billing, SUM(CASE WHEN tc.transaction_class
尝试创建一个查询来给出总胜、平和负。我有以下查询 SELECT CASE WHEN m.home_team = '192' AND m.home_full_time_score
我正在尝试生成一份报告,显示排名靠前的推荐人以及他们推荐的人产生了多少收入。 这是我的表格的缩写版本: Users Table ------------------ id referral_user_
我有以下查询,并得到了预期的结果: SELECT IF (a1>b1,'1','0') AS a1r, IF (a2>b2,'1','0') AS a2r,
我尝试了几种不同的解决方案,但都没有成功。我给出的表格是一个示例,其设计和功能与我实际使用的表格类似: PK | Color | Count -------------------
我正在尝试构建一个查询来检查我的库存。 SELECT COUNT(*) AS item_count, reseller_id, sum(sold) as sold_count, sum(refunde
我试图解决一个看起来像下面编写的代码的问题,但由于缺乏知识和阅读 sqlalchemy 文档,我还没有真正找到解决问题的方法。 目标: 如果 year_column 中的年份相同,则获取 sales_
我有一个包含一周中多天的表格。一周中的每一天都有独特的属性,例如冰淇淋是否在这一天成功送达: ID DAY_WEEK ICE_CREAM 1 Monday
首先,我有一个名为store_00的表 id | ref | item | qty | cost | sell 1 22 x1 5 10 15 2 22
我正在编写一个程序,计算每个数字的总和,直到 1000。例如,1+2+3+4+5....+100。首先,我将求和作业分配给 10 个处理器:处理器 0 得到 1-100,处理器 1 得到 101-20
我想在一个循环中一次对多个属性求和: class Some(object): def __init__(self, acounter, bcounter): self.acou
我是一名优秀的程序员,十分优秀!