【发布时间】:2017-12-19 02:10:32
【问题描述】:
问题如下:我有一个带有自定义单元格的表格视图。该单元格包含一个标签和一个 UISwitch。我已将 label.text 值设置为数组,但 UISwitch 正在被重用。
示例:如果我在第一行切换开关,第 5 行将启用,如果我滚动它会继续重复使用单元格并导致问题。
视频:https://vimeo.com/247906440
视图控制器:
class ViewController: UIViewController {
let array = ["One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"]
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension ViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomTableViewCell
cell.label.text = array[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return array.count
}
}
自定义单元格:
class CustomTableViewCell: UITableViewCell {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var toggleSwitch: UISwitch!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
}
我意识到没有代码尝试存储这些数据,因为我没有成功。任何想法都会有所帮助。该项目目前使用 MVC 模型,我相信这是答案,但需要一些帮助。
【问题讨论】:
-
toggleSwitch的开/关状态保存在哪里?由于它可以在您滚动UITableView的任何时候重复使用,因此我建议您不要依赖任何IBOutlet。您应该实现一个模型来存储信息,然后将该模型用于injecting您需要的 UI。
标签: ios swift uitableview uiswitch