数组数据在 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

【问题讨论】:

请注意,inrstatusreqtime 是同步的。它们应该在一个大数组中(带有自定义对象),而不是像这样分开。对于第二个问题:是的,您可以,您只需编写一个自定义单元格来模仿它,并调整您的数据源。 检查您的numberOfRowsInSection。打印出section。我很确定它会返回 1,2,3,4... 等等。现在无法测试。返回 1 而不是 section 不,它只返回 inr 的第一个值和状态@Akaino @Larme 你能用代码解释一下吗,这可能会有所帮助,谢谢 @Larme 其实我是从 api 获取这些数据,这个解释只是演示给你看 【参考方案1】:

在这里,inrreqtimestatus 中的项目数量相同,因此对于每个 inr 项目,您将只有一个 reqtimesingle 状态:

将您的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

【讨论】:

他只为标题返回stringnumberOfRowsInSection 应该返回 int numberOfRowsInSection中,返回值为return reqtime[section]是一个字符串值reqtime是一个字符串数组 它不起作用,我已经更改了我的代码并将 return reqtime[section] 替换为 return 1@AnkitJayaswal @BaljinderKumar,我正在获取作为附件截图的数据。你还没有这样吗? 不,@AnkitJayaswal

以上是关于数组数据在 swift 4 的表视图中重复的主要内容,如果未能解决你的问题,请参考以下文章

来自数组索引的表视图超出范围

在 Swift 中的表格视图中填充数据的问题

2 在一个视图控制器中使用 Swift 3 的表视图

在 SWIFT 的表视图中填充自定义单元格时出错

Swift 中的表视图页脚

用 json 数据 swift 4 填充表视图