Как получить контекст того, что Object соответствует определенному UISegmentedControl - PullRequest
0 голосов
/ 10 июля 2019

Ниже вы можете найти изображение подкласса UITableViewCell, который я создал. Каждая ячейка соответствует игре, в которую играют два участника, и имеет победителя, определенного в выбранном элементе управления (в редакторе указано «первый» и «второй»). Если это значение победителя изменяется, я хочу обновить информацию об этой игре и сохранить ее в Базовых данных. Проблема заключается в том, что когда я создаю соединение IBAction со своей раскадровкой, и оно срабатывает при смене победителя, у него нет контекста или знания о том, к какой игре оно принадлежит, и поэтому я не могу понять, какую игру обновить. победитель.

Как получить контекст игры, в которой действовал этот метод IBAction winnerChanged()? Могу ли я как-то использовать superView или superClass UISegmentedControl, чтобы получить больше информации о UITableViewCell в целом?

@IBAction func winnerChanged(_ sender: UISegmentedControl) {
        os_log("Saving games because winner was changed", type: .debug)
        // need to know what game to change the winner of here
        self.allGames.forEach({ updateOrCreateGame(game: $0) })
    }

Вот мой код для моего подкласса UITableViewCell:

class ConferenceResultsTableViewCell: UITableViewCell {

    @IBOutlet weak var gameWinnerControl: UISegmentedControl!
    @IBOutlet weak var confidenceTextField: UITextField!
    @IBOutlet weak var confidenceAverageAllUsersLabel: UILabel!

}

enter image description here

1 Ответ

1 голос
/ 10 июля 2019

Обычно вы создаете такие @IBAction s прямо внутри ячейки. Исходя из вашего вопроса, я предполагаю, что метод @IBAction func winnerChanged(_ sender: UISegmentedControl) определен где-то в вашем контроллере.

Было бы намного проще, а также разрешил бы ваш вопрос, если бы вы создали выделенный класс для вашей ячейки с реализацией этого метода. Это позволит вам подключить вашу ячейку к конкретному объекту CoreData (через идентификатор в примере ниже). Все, что вам нужно сделать, это вызвать setup метод где-нибудь из cellForRow вашего контроллера / источника данных.

final class MatchCell: UITableViewCell {

   @IBAction func winnerChanged(_ sender: UISegmentedControl) {
      ...
   }

   func setup(with match: Match) {
      self.matchId = mathc.id
      ...
   }

}

если вам все еще нужен этот updateOrCreateGame метод внутри вашего контроллера, вы можете передать обратный вызов onUpdateRequested: (Match) -> Void в setup метод и вызвать этот обратный вызов из winnerChanged метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...