将数据从Xib单元格传递到ViewController

时间:2019-02-08 23:40:47

标签: ios swift tableview xib

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

我在情节提要中有一个具有表视图的视图控制器(已连接到导航控制器),并且将xib文件用于自定义单元格。

这是我的两节课:

ViewController类 -拥有表格视图 -是我的数据源 -将数据加载到我的xib表视图单元格中 -导航栏上有一个名为“成绩”的按钮

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

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

当用户单击“成绩”按钮时,我想将用户轻按的所有按钮的titleLabel文本存储在数组中,但是我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

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

    // ...
}