Я могу заполнить TableViewController A записями из CloudKit (var restaurants: [CKRecord] = []
), но не уверен, как передать подмножество [CKRecord] в TableViewController B, поскольку оба контроллера имеют динамические ячейки прототипа и имеют их соответствующие ячейки вида определены as UITableViewCell
. Кроме того, последовательность должна запускаться только тогда, когда пользователь касается элемента навигации в TableViewController A (не при выбранной ячейке).
Вот как я реализовал cellForRowAt
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "dataCell", for: indexPath) as! RestuarantViewCell
// Configure the cell...
let restaurant = restaurants[indexPath.row]
cell.RestNameLabel?.text = restaurant.object(forKey: "name") as? String
cell.RestDescLabel?.text = restaurant.object(forKey: "desc") as? String
if let image = restaurant.object(forKey: "image"), let imageAsset = image as? CKAsset {
if let imageData = try?Data.init(contentsOf: imageAsset.fileURL) {
cell.RestImageView?.image = UIImage(data: imageData)
}
}
return cell
}
- Когда пользователь выполняет пролистывание, добавьте этот элемент в список (
var list: [CKRecord] = []
)
переопределить функцию tableView (_ tableView: UITableView, leadSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let addAction = UIContextualAction(style: .normal, title: "Save") { (action, sourceView, completionHandler) in
//Add to list
self.list.append(self.restaurants[indexPath.row])
print(self.list)
//Delete row and reload tableView i.e. tableView.reloadData()
self.tableView.deleteRows(at: [indexPath], with: .fade)
//Call completion handler to dismiss the action button
completionHandler(true)
}
//Configuring delete button
addAction.backgroundColor = UIColor(red: 76, green: 217, blue: 100)
//Create button for user swipe
let swipeConfiguration = UISwipeActionsConfiguration(actions: [addAction])
return swipeConfiguration
}
- Этот список отображается только тогда, когда пользователь нажимает элемент навигации в TableViewController A (не при выбранной ячейке). Segue
"showList"
был реализован в раскадровке от элемента навигации до TableViewController B.
Короче говоря, TableViewController B - это список ресторанов (название, изображение), сохраненный из TableViewController A
Должен ли я использовать func prepare(for segue: UIStoryboardSegue, sender: Any?)
или, возможно, сохранить этот свайп в облаке и извлечь его снова в TableViewController B?
Цените ваше время и предложения!