如何从 UiTableViewCell 更改视图控制器中字典的值

Posted

技术标签:

【中文标题】如何从 UiTableViewCell 更改视图控制器中字典的值【英文标题】:How to change value of dictionary in View Controller from UiTableViewCell 【发布时间】:2017-09-24 06:25:30 【问题描述】:

所以我有 TableViewCell 是从我的视图控制器中的 2 个字典中填充的。

var categories : [Int : [String : Any]]!
var assignments : [Int: [String : Any]]!

我的单元格中有一个用户应该能够编辑的 UiTextField。然后,我希望能够根据用户更改的内容更改该字典中某些键的值,并使用这些更改重新显示表格。我的主要问题是我不知道如何从我的单元格中访问这些变量。我的视图控制器中有一个方法,它获取文本字段所在的行以及文本字段的值,并更新字典。我需要的是能够实例化单元格所在的视图控制器,但我需要已经将值加载到类别和分配字典中的原始实例。如果您对我如何完成此操作有任何其他想法,请发布。

【问题讨论】:

【参考方案1】:

您可以使用委托将单元格数据共享给您的 VC:

protocol YourCellDelegate() 
    func pickedString(str: String)


class YourCell: UITableViewCell 
    var delegate: YourCellDelegate! = nil
    @IBOutlet weak var textField: UITextField!
    .....//some set-method, where you can handle a text
    func textHandle() 
        guard let del = delegate else  return 
        del.pickedString(textField.text)
    

    .....

在您的 VC 中的用法:创建单元格时,设置其委托自身:

...
cell.delegate = self
...

确定你的 VC 支持你的委托协议:

class YourVC: UIViewController, YourCellDelegate 

现在,你必须实现协议方法:

class YourVC: UIViewController, YourCellDelegate 
....
    func pickedString(str: String) 

    
....

所有时候,当您在单元格中使用 textHandle() 时,pickString(str: String) 会在您的 VC 中使用来自 textField 的字符串激活。

享受吧!

【讨论】:

在这种情况下,您将创建保留周期。 delegate 内的 YourCell 属性应该是 weak

以上是关于如何从 UiTableViewCell 更改视图控制器中字典的值的主要内容,如果未能解决你的问题,请参考以下文章

更改 UITableViewCell 中的删除附件视图

自动调整 UITableViewCell:更改自定义单元格内视图的高度

如何定位 UITableViewCell 内容视图

如何在 OBJECTIVE C 的 UITableViewCell 中更改先前按下的 UIButton 标签?

点击单元格后不同的 UITableViewCell 子视图布局

更改 uitableviewcell 中的自定义附件视图?