Swift 3では、テーブルビューで複数の選択肢を選択して保存するにはどうすればよいですか?私が前に戻ると、私が前に選んだものを見てそれを変えたい!私はdidSelectRowAtIndexPath
とdidDeselectRowAtIndexPath
を使用しています。複数の選択をテーブルビューで選択して保存する方法
テーブルビューを開いて行を選択すると、すべてOKです。私は自分の選択をして、次のViewControllerに行くことができます。しかし、TableViewに戻ると、選択した行が表示されず、選択内容を変更できなくなりました。
var selectedRows = Array<IndexPath>()
override func viewDidLoad() {
super.viewDidLoad()
subServicesTableView.allowsMultipleSelection = true
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! SubServicesTableViewCell
cell.subServiceName.text = fetchedResultController.object(at: indexPath).name
if !selectedRows.isEmpty {
for row in selectedRows {
if row == indexPath {
cell.isSelected = true
cell.accessoryType = cell.isSelected ? .checkmark : .none
}
}
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let currentCell = subServicesTableView.cellForRow(at: indexPath) as! SubServicesTableViewCell
currentCell.chooseMark.backgroundColor = UIColor.green
selectedSubServices.append(fetchedResultController.object(at: indexPath))
selectedRows.append(indexPath)
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
let currentCell = subServicesTableView.cellForRow(at: indexPath) as! SubServicesTableViewCell
currentCell.chooseMark.backgroundColor = UIColor.clear
selectedSubServices = selectedSubServices.filter(){$0 != fetchedResultController.object(at: indexPath)}
selectedRows = selectedRows.filter(){$0 != indexPath}
}
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
for index in selectedRows {
if index == indexPath {
self.subServicesTableView.selectRow(at: indexPath, animated: false, scrollPosition: .none)
if let serviveCell = cell as? SubServicesTableViewCell {
serviveCell.chooseMark.backgroundColor = UIColor.green
}
}
}
}
あなたの選択には何らかの持続性を導入する必要があります。シングルトンを導入するだけで、選択肢を参照することができます。 – dirtydanee