【问题标题】:Inserting rows into UITableView using data that's passed from another view controller via delegate使用通过委托从另一个视图控制器传递的数据将行插入 UITableView
【发布时间】:2017-11-29 05:42:19
【问题描述】:

我已正确设置委托,以便两个不同的视图控制器相互通信。传数据没有问题(我查过了,传数据成功)。我遇到的唯一问题是当我使用以下代码插入新行时:

let indexPath = IndexPath(row: paymentMethodArray.count - 1, section: 0)
tableView.insertRows(at: [indexPath], with: .automatic)
tableView.reloadData()

它不做任何事情(它不更新行但数据被传递并附加到数组中)。但是,当我从同一个视图控制器调用函数而不必从另一个视图控制器返回时,此代码有效(数据从 AddPaymentViewController 发送到此视图控制器,AddPaymentViewController 是当前 vc 之后的 vc)。我的猜测是我的目的地 segue 或视图控制器的代码是错误的。

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let addPaymentViewController = segue.destination as! AddPaymentViewController
    addPaymentViewController.delegate = self
}

如果您需要这方面的更多信息,我可以补充。请告诉我,谢谢。

【问题讨论】:

  • 除了问题从不insertRows(... /deleteRows(...之后立即致电reloadData()。因为插入/删除会更新 UI。以及在哪里将对应的项添加到数据源数组中?
  • 我在“let indexPath...”之前将传递的数据添加到数组中,所以在这种情况下,我应该将 reloadData() 放在哪里?
  • 删除该行,它是多余的,您将丢失动画。
  • @vadian true,除此之外你还看到我的代码的问题吗?似乎只是没有发生行插入。当我从同一个视图控制器调用该函数时,行插入工作。此外,数据也被正确传递是 100% 清楚的。
  • 我猜这个问题与问题中的代码没有直接关系。

标签: ios swift uitableview segue


【解决方案1】:

在您添加更多行后,请仔细检查表中的行数是否已更新。

func tableView(UITableView, numberOfRowsInSection: Int)

还要检查您是否想在将新单元格插入表格时使用tableView.beginUpdates()tableView.endUpdates()

【讨论】:

  • 请不要推荐beginUpdates / endUpdates。在这种情况下它是没有用的。
  • 所以我尝试了你所说的,它说该行已添加但它没有显示在屏幕上。我假设某些东西不适用于动画呢?
  • 我无法在您包含在问题中的代码中发现任何错误。也许还可以查看tableView:cellForRowAtIndexPath:,这样就不会出现任何问题。正如developer.apple.com/documentation/uikit/uitableview/… 状态,在您插入行以更新可见单元格后调用委托和数据源方法。
猜你喜欢
  • 2018-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
相关资源
最近更新 更多