ios - 将数据从 xib 单元格传递到视图控制器
问题描述
我正在进行多项选择测试,但我不知道如何获得用户选择的答案,因此我可以对测试进行评分。
我在情节提要中有一个视图控制器(连接到导航控制器),它有一个表格视图,我为我的自定义单元格使用了一个 xib 文件。
这是我的两个课程:
ViewController 类 - 包含一个表格视图 - 是我的数据源 - 将数据加载到我的 xib 表格视图单元格 - 导航栏有一个名为“等级”的按钮
表格视图单元格类 - 有一个显示问题的标签插座 - 有三个显示答案选项的按钮插座 - 有一个在点击时更改按钮背景颜色的操作
将问题和答案选择数据加载到 xib 单元格中可以正常工作。
当用户单击“评分”按钮时,我想将用户点击的所有按钮的 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
// ...
}
// ...
}
推荐阅读
- google-cloud-firestore - 从 Firestore 安全规则中的指数数解析 long
- r - gganimate:动画 alpha 不适用于 transition_reveal?
- c# - 如何在 Visual Studio 模板架构中添加条件并根据条件生成项目
- node.js - 如何修复 npm 安装 CXX=clang++ --unsafe-perm
- docker - 如何在 /mosquitto/data MQTT mosquitto 中存储消息?
- python-3.x - 将新列名映射到 Pandas 中的数据框
- java - 在 Java 的类加载阶段,符号引用如何解析为直接引用?
- azure - 如何在 Azure 数据工厂 V2 中设置看似循环但实际上不是循环的依赖项
- c - 为什么我的动态分配的数组不能在它的函数之外被访问?[C]
- c# - Task.WhenAll() 包含大量任务