在Swift中的动态表中的自定义单元格之间移动数据

时间:2015-07-07 07:01:07

标签: ios swift

首先,道歉,但我是所有这一切的新手(iOS Dev& Swift)。

我有一些自动加载到tableview中的自定义单元格。我的一个单元格是一个数据选择器,当用户更改日期时,我想将更新的数据发送到其他单元格中,但我很难过。请帮助。

2 个答案:

答案 0 :(得分:0)

由于您的单元格已动态加载到表格中,因此无法直接处理特定单元格。您应该在用户选择日期时尝试更改基础数据源,并调用table.reloadData()

答案 1 :(得分:0)

假设单元格已加载且可见,您可以将一个单元格的引用传递给另一个单元格,但是您需要在自定义单元格中创建几个方法。

在我的例子中,我有两个自定义单元格,一个名为CellBirthday的单元格,其中包含名为birthDateLabel的标签,以及一个包含名为CellDatePicker的DatePicker的单元格。我希望每次DataPicker值更改时都更新birthDateLabel。

我将首先加载单元格并在CellDatePicker中存储CellBirthday的引用,然后当日期选择器更改时,我将更新CellBirthday内的标签值。这是加载两个单元格的相关代码片段。在此示例中,我对单元格标记和类名称使用相同的名称,例如,CellBirthday是故事板中指定的单元格标记和类名称:

    let birthdayCell = tableView.dequeueReusableCell(withIdentifier: "CellBirthday") as! CellBirthday
    let datePickerCell = tableView.dequeueReusableCell(withIdentifier: "CellDatePicker") as! CellDatePicker
    datePickerCell.setBirthdayCell(BirthdayCell: birthdayCell)

以下是自定义类:

class CellBirthday: UITableViewCell {

    @IBOutlet fileprivate weak var birthDateLabel: UILabel!

    var birthdayText: String? {
        didSet {
            birthDateLabel.text = birthdayText
        }
    }
}

class CellDatePicker: UITableViewCell {

    @IBOutlet fileprivate weak var datePicker: UIDatePicker!

    var birthdayCell: CellBirthday?

    func setBirthdayCell(BirthdayCell birthdayCell: CellBirthday) {
        self.birthdayCell = birthdayCell
    }

    func getDateString(FromPicker picker: UIDatePicker? = nil) -> String {

        var dateText: String = ""

        if picker != nil {
            let dateFormatter = DateFormatter()
            dateFormatter.setLocalizedDateFormatFromTemplate("MMMMdy")
            dateText = dateFormatter.string(from: picker!.date)
        }
        return dateText
    }

    @IBAction func datePickerValueChange(_ sender: UIDatePicker) {
        if birthdayCell != nil {
            birthdayCell!.birthdayText = getDateString(FromPicker: sender)
        }
    }
}