Сохранить состояние кнопки включения / выключения в UITableViewCell - Swift - PullRequest
0 голосов
/ 04 мая 2020

Я искал много сообщений в SO, но не смог найти ответ на этот вопрос.

У меня есть таблица, в которой перечислены различные элементы. Каждая ячейка в табличном представлении имеет кнопку, которая меняет изображение при нажатии, эффективно работая как кнопка «вкл» или «выкл», чтобы показать пользователю, какие элементы в списке они выбрали. В моем собственном классе Cell Prototype есть переменная, в которой хранится значение true или false, которое обновляется при каждом нажатии кнопки.

В табличном представлении есть кнопка «Готово», которая при нажатии на нее вызывает откат Segue для go возврата к первому контроллеру просмотра.

Когда пользователь нажимает кнопку «Ввести просмотр таблицы» (на первом контроллере просмотра), чтобы отобразить таблицу, все кнопки go возвращаются к их состояние по умолчанию, я предполагаю, потому что каждый раз, когда происходит переход к экрану представления таблицы, создается новый экземпляр таблицы для отображения.

То, чего я пытаюсь достичь, - это состояние кнопки ( либо вкл., либо выкл.) сохраняется при возврате к экрану таблицы. Я пытался некоторое время отправить значение Integer обратно из класса TableCell (с помощью делегата) в первый контроллер View, а затем передать это значение обратно в контроллер Table View, когда вызывается прямая передача для того, чтобы "сохранить" из предыдущего значения состояния ", которое можно сравнить с моментом создания ячеек, чтобы указать, была ли нажата кнопка или нет. Не удалось заставить его работать, хотя, чтобы сохранить состояние кнопок. Список элементов в таблице также будет меняться в зависимости от того, что добавляет пользователь.

Некоторые снимки экрана и код приведены ниже. В коде нет делегата, который я пытался включить (так как он не работал), но если он понадобится, я отредактирую пост, чтобы включить его. Любая помощь будет принята с благодарностью. Большое спасибо !!

Main View Controller Table With Buttons in Init Some Buttons Turned On, Want To keep This State next time the Table is loaded

Код, который у меня пока есть:

//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
  } 
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...