【问题标题】:Passing data from xib cell to viewcontroller将数据从 xib 单元格传递到视图控制器
【发布时间】:2019-07-03 05:52:04
【问题描述】:

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

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

这是我的两个课程:

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

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

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

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

【问题讨论】:

  • 您可以创建一个从单元格返回到视图控制器的委托,以便单元格中的按钮点击可以更新视图控制器持有的模型。

标签: ios swift tableview xib


【解决方案1】:

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

    // ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多