将数据从 xib 单元格传递到 viewcontroller

Passing data from xib cell to viewcontroller

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

我在故事板中有一个视图控制器(连接到导航控制器),它有一个 table 视图,我为我的自定义单元格使用了一个 xib 文件。

这是我的两个 class:

ViewController class - 持有 table 观点 - 是我的数据源 - 将数据加载到我的 xib table 视图单元格中 - 导航栏有一个名为 "Grade"

的按钮

Table 查看单元格 class - 有一个显示问题的标签出口 - 具有三个显示答案选择的按钮插座 - 有一个在点击时改变按钮背景颜色的动作

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

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

这类事情的典型模式是定义一个委托协议,该协议将从您的 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
        // ...
    }

    // ...
}