在下面,您可以找到我创建的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!
}
答案 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
方法调用该回调。