如何获取与某个UISegmentedControl对应的对象的上下文

时间:2019-07-10 18:34:02

标签: ios swift storyboard interface-builder

在下面,您可以找到我创建的UITableViewCell子类的图像。每个单元对应一个在两个参赛者之间进行的游戏,并具有由选定控件(在编辑器中表示“第一”和“第二”)定义的获胜者。如果更改此获胜者的值,我想更新该游戏的信息并将其存储在Core Data中。问题是,当我创建一个到故事板的IBAction连接时,当获胜者被更改时就会触发该连接,它没有上下文或不知道该游戏属于哪个游戏的信息,因此我无法弄清楚该更新哪个游戏。的获胜者。

如何获取此IBAction winnerChanged()方法中执行过的游戏的上下文?我可以以某种方式使用UISegmentedControl的superView或superClass来获取有关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 个答案:

答案 0 :(得分:1)

通常,您会在单元格内部直接创建@IBAction。根据您的问题,我假设方法@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方法调用该回调。