将数据从 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
// ...
}
// ...
}
我正在进行多项选择题测试,但我不知道如何获取用户选择的答案以便我对测试进行评分。
我在故事板中有一个视图控制器(连接到导航控制器),它有一个 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
// ...
}
// ...
}