gpt4 book ai didi

ios - reloadRowsAtIndexPaths 不更新我的单元格数据

转载 作者:行者123 更新时间:2023-11-28 06:59:17 34 4
gpt4 key购买 nike

我的 ViewController 中有一个 UITableView。其中一个单元格可以接入另一个 TableViewController 以允许选择一个值。

我想在从被调用者 ViewController 返回后更新我的单元格。

现在,我可以通过委托(delegate)传回选定的值。

但是,我尝试了以下方法,但都不起作用。

  1. self.mainTable.reloadData()

  2.     dispatch_async(dispatch_get_main_queue()) {
    self.mainTable.reloadData()
    }
  3.     self.mainTable.beginUpdates()
    self.mainTable.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
    self.mainTable.endUpdates()

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {被调用和执行没有错误。

但UI并没有改变

这是我在 cellForRowAtIndexPath 中更新值的方式

            if let currentCell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell! {
currentCell.textLabel?.text = address
return currentCell
}

这是我的 cellForRowAtIndexPath -

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let id = "Cell"
println(indexPath)

if indexPath.row == 1 {
var cell = tableView.dequeueReusableCellWithIdentifier(id) as? UITableViewCell

if cell == nil {
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: id)

cell?.contentMode = UIViewContentMode.Center
cell?.selectionStyle = UITableViewCellSelectionStyle.None
cell?.contentView.addSubview(mapView!)

}
return cell!
}else{

let cell = UITableViewCell()
cell.textLabel?.text = self.address

return cell
}
}

这是委托(delegate)方法-

func passBackSelectedAddress(address: String) { 
self.address = address
var indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.mainTable.beginUpdates()
self.mainTable.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
self.mainTable.endUpdates()
}

我的修复:经过更多调试,我找到了原因,self.address 值在委托(delegate)中更新,但它回滚到 cellForRowAtIndexPath 中的先前值。

我将属性更改为静态属性,然后解决问题。我不确定实例属性有什么问题,以及为什么会反转。

静态变量_地址:String = ""

最佳答案

您似乎正试图从 UITableView 中获取一个单元格,然后以这种方式更新 textLabel 值。但是,UITableViewUITableViewCell 并不意味着以这种方式更新。相反,将 address 的值存储在您的类中,并在委托(delegate)回调到您的类中时更新此值。如果cellForRowAtIndexPath构造UITableViewCell,值为self.address,调用mainTable.reloadData()后应该更新单元格为新值。

例如:

var address: String

func delegateCompleted(address: String) {
self.address = address
self.mainTable.reloadData()
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(<your identifier>)

if (indexPath == <your address cell indexPath>) {
let textLabel = <get your textLabel from the cell>
textLabel?.text = self.address
}

return cell
}

关于ios - reloadRowsAtIndexPaths 不更新我的单元格数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32466743/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com