首页 > 解决方案 > 将数据从 xib 单元格传递到视图控制器

问题描述

我正在进行多项选择测试,但我不知道如何获得用户选择的答案,因此我可以对测试进行评分。

我在情节提要中有一个视图控制器(连接到导航控制器),它有一个表格视图,我为我的自定义单元格使用了一个 xib 文件。

这是我的两个课程:

ViewController 类 - 包含一个表格视图 - 是我的数据源 - 将数据加载到我的 xib 表格视图单元格 - 导航栏有一个名为“等级”的按钮

表格视图单元格类 - 有一个显示问题的标签插座 - 有三个显示答案选项的按钮插座 - 有一个在点击时更改按钮背景颜色的操作

将问题和答案选择数据加载到 xib 单元格中可以正常工作。

当用户单击“评分”按钮时,我想将用户点击的所有按钮的 titleLabel 文本存储在一个数组中,但我不知道该怎么做。

标签: iosswifttableviewxib

解决方案


这类事情的典型模式是定义一个委托协议,该协议将从您的 UITableViewCells 接收事件,例如按钮的点击。委托可以发送哪个单元格和哪个单元格中的哪个按钮被点击,因此您的 TableView 或 ViewController 可以更新其视图模型,了解哪些按钮已在视图范围内被点击。

class AnswerCellView: UITableViewCell {
    // ...

    weak var delegate: AnswerCellViewDelegate?

    // The methods here linked to your outlets should call the answerCellClicked on the delegate

    // ...
}

protocol AnswerCellViewDelegate {
    func answerCellClicked(answerCell: AnswerCellView, answerButton: UIButton)
}

// ...

class AnswerCellTableView: UITableViewDataSource, AnswerCellViewDelegate {
    // ...

    func answerCellClicked(answerCell: AnswerCellView, answer: UIButton) {
        // do the work to keep track of which buttons have been clicked
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var answerCell: AnswerCellView
        // construct your AnswerCellView, setting the delegate property on your cell to self
        // ...
        answerCell.delegate = self
        // ...
    }

    // ...
}


推荐阅读