数组数据在 swift 4 的表视图中重复
Posted
技术标签:
【中文标题】数组数据在 swift 4 的表视图中重复【英文标题】:array data is repeating in table view in swift 4 【发布时间】:2018-04-13 08:48:19 【问题描述】:这些是一些变量,我想在表格视图或集合视图中显示哪些数据。
let inr = ["200.0", "1200.0", "500.0", "2000.0", "2000.0", "2000.0", "2000.0", "2000.0", "3000.0", "5000.0", "1000.0", "100000.0", "100000.0"]
let reqtime = ["2018-04-11 13:54:46", "2018-04-09 16:31:42", "2018-04-09 12:26:32", "2018-04-09 12:19:40", "2018-04-09 12:19:35", "2018-04-09 12:19:23", "2018-04-09 12:09:05", "2018-04-09 12:08:25", "2018-04-09 11:38:15", "2018-04-09 11:07:59", "2018-04-09 11:03:58", "2018-04-09 10:54:55", "2018-04-09 10:45:47"]
let status = ["Request Approve", "Request Pending", "Request Pending", "Request Pending", "Request Pending", "Request Approve", "Request Pending", "Request Pending", "Request Pending", "Request Pending", "Request Pending", "Request Pending", "Request Approve"]
这是我的表格视图委托功能代码:
func numberOfSections(in tableView: UITableView) -> Int
//print("inrvalue sec\(self.inrValues.count)")
return inr.count
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
//print("section p\(self.requestTimeValue[section])")
return reqtime[section]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 1
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 44.0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableViewOutlet.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DepositHistoryTableViewCell
let inrval = Double(inr[indexPath.section])
cell.lblINR.text = String(inrval)
cell.lblStatus.text = status[indexPath.section]
return cell
数据显示如下图: table view data
问题 1. 想要显示这样的数据...
Section: reqtime(row[0])
inr(row[0])
status(row[0]),
Section: reqtime(row[1])
inr(row[1])
status(row[1])
Section: reqtime(row[2])
inr(row[2])
status(row[2])
等等。
问题 2:有没有其他方法可以更好地显示这些数据,例如:any other way to data like this in swift
更改我的代码后,数据如下图所示:this is how data shown after numberofRowinSection return 1
【问题讨论】:
请注意,inr
、status
和 reqtime
是同步的。它们应该在一个大数组中(带有自定义对象),而不是像这样分开。对于第二个问题:是的,您可以,您只需编写一个自定义单元格来模仿它,并调整您的数据源。
检查您的numberOfRowsInSection
。打印出section
。我很确定它会返回 1,2,3,4... 等等。现在无法测试。返回 1 而不是 section
。
不,它只返回 inr 的第一个值和状态@Akaino
@Larme 你能用代码解释一下吗,这可能会有所帮助,谢谢
@Larme 其实我是从 api 获取这些数据,这个解释只是演示给你看
【参考方案1】:
在这里,
inr
、reqtime
和status
中的项目数量相同,因此对于每个inr
项目,您将只有一个reqtime
和single
状态:
将您的numberOfRowsInSection
更新为:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 1
注意:目前你在这个方法中返回reqtime[section]
(String)也是不对的,因为这个函数只能有一个Int
返回值。
将 UITableView 的委托和数据源方法更新为:
func numberOfSections(in tableView: UITableView) -> Int
return inr.count
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
return reqtime[section]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
// Here you have same no of items in inr, reqtime and status so for each inr item you will only have a single reqtime and single status
return 1
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 60.0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableViewOutlet.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DepositHistoryTableViewCell
let inrval = Double(inr[indexPath.section])
cell.lblINR.text = String(format: "%.2f",inrval)
cell.lblStatus.text = status[indexPath.section]
return cell
更新: // 如果你想像水平表一样显示数据
let inr = ["200.0", "1200.0", "500.0", "2000.0", "2000.0", "2000.0", "2000.0", "2000.0", "3000.0", "5000.0", "1000.0", "100000.0", "100000.0"]
let reqtime = ["2018-04-11 13:54:46", "2018-04-09 16:31:42", "2018-04-09 12:26:32", "2018-04-09 12:19:40", "2018-04-09 12:19:35", "2018-04-09 12:19:23", "2018-04-09 12:09:05", "2018-04-09 12:08:25", "2018-04-09 11:38:15", "2018-04-09 11:07:59", "2018-04-09 11:03:58", "2018-04-09 10:54:55", "2018-04-09 10:45:47"]
let status = ["Approve", "Pending", "Pending", "Pending", "Pending", "Approve", "Pending", "Pending", "Pending", "Pending", "Pending", "Pending", "Approve"]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return inr.count
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 40.0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableViewOutlet.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DepositHistoryTableViewCell
cell.lblRequestTime.text = reqtime[indexPath.row]
let inrval = Double(inr[indexPath.row])
cell.lblINR.text = String(format: "%.2f",inrval!)
cell.lblStatus.text = status[indexPath.row]
return cell
【讨论】:
他只为标题返回string
。 numberOfRowsInSection
应该返回 int
。
在numberOfRowsInSection
中,返回值为return reqtime[section]
是一个字符串值reqtime
是一个字符串数组
它不起作用,我已经更改了我的代码并将 return reqtime[section] 替换为 return 1@AnkitJayaswal
@BaljinderKumar,我正在获取作为附件截图的数据。你还没有这样吗?
不,@AnkitJayaswal以上是关于数组数据在 swift 4 的表视图中重复的主要内容,如果未能解决你的问题,请参考以下文章