Я искал много сообщений в SO, но не смог найти ответ на этот вопрос.
У меня есть таблица, в которой перечислены различные элементы. Каждая ячейка в табличном представлении имеет кнопку, которая меняет изображение при нажатии, эффективно работая как кнопка «вкл» или «выкл», чтобы показать пользователю, какие элементы в списке они выбрали. В моем собственном классе Cell Prototype есть переменная, в которой хранится значение true или false, которое обновляется при каждом нажатии кнопки.
В табличном представлении есть кнопка «Готово», которая при нажатии на нее вызывает откат Segue для go возврата к первому контроллеру просмотра.
Когда пользователь нажимает кнопку «Ввести просмотр таблицы» (на первом контроллере просмотра), чтобы отобразить таблицу, все кнопки go возвращаются к их состояние по умолчанию, я предполагаю, потому что каждый раз, когда происходит переход к экрану представления таблицы, создается новый экземпляр таблицы для отображения.
То, чего я пытаюсь достичь, - это состояние кнопки ( либо вкл., либо выкл.) сохраняется при возврате к экрану таблицы. Я пытался некоторое время отправить значение Integer обратно из класса TableCell (с помощью делегата) в первый контроллер View, а затем передать это значение обратно в контроллер Table View, когда вызывается прямая передача для того, чтобы "сохранить" из предыдущего значения состояния ", которое можно сравнить с моментом создания ячеек, чтобы указать, была ли нажата кнопка или нет. Не удалось заставить его работать, хотя, чтобы сохранить состояние кнопок. Список элементов в таблице также будет меняться в зависимости от того, что добавляет пользователь.
Некоторые снимки экрана и код приведены ниже. В коде нет делегата, который я пытался включить (так как он не работал), но если он понадобится, я отредактирую пост, чтобы включить его. Любая помощь будет принята с благодарностью. Большое спасибо !!
Код, который у меня пока есть:
//Main View Controller//
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
//segue to the Table View Screen
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "EnterTableView" {
let newTableView = segue.destination as! TableViewController
}
}
// Unwind Segue Called on Exit From Table View
@IBAction func unwindToMainViewController (_segue:UIStoryboardSegue) {
}
}
// Table View Controller //
class TableViewController: UITableViewController {
var dataArray = ["A", "B", "C", "D"]
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
//create one section for table
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//create number of rows based on the number of items in the dataArray set above
return dataArray.count
}
// an array that will contain all the cells
var cellArray = [UITableViewCell] ()
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//create a new cell based on the cell class "TableViewCell"
let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) as? TableViewCell
// variable to contain a single element from the dataArray - updates every time a new cell is created
let dataArrayForCells = dataArray [indexPath.row]
//set cell label text to show the value from the dataArrayForCells
cell!.label.text = dataArrayForCells
cellArray.append(cell!)
return cell!
}
// Table Cell Class//
class TableViewCell: UITableViewCell {
@IBOutlet weak var label: UILabel! // label to hold display some text
@IBOutlet weak var buttonImage: UIImageView! //image for button
var buttonClicked = true //variable to contain weather the has been clicked
//if button is tapped on run the below
@IBAction func aButton(_ sender: Any) {
//if button is clicked is true, swap image to red ("on") button, set buttonClicked value to false
if buttonClicked {
buttonImage.image = #imageLiteral(resourceName: "Rec Button Red")
buttonClicked = false
}
// if buttonClicked value is false swap image to grey ("off") button set buttonClicked value back to true
else {
buttonImage.image = #imageLiteral(resourceName: "Rec Button Grey")
buttonClicked = true
}
}