如何获取某个对象对应于某个 UISegmentedControl 的上下文
How to get context of what Object corresponds to a certain UISegmentedControl
您可以在下面找到我创建的 UITableViewCell 子类的图像。每个单元格对应一个在两个参赛者之间进行的游戏,并且有一个获胜者,由所选控件定义(在编辑器中显示 "first" 和 "second")。如果这个获胜者值发生变化,我想更新该游戏的信息并将其存储在核心数据中。问题是,当我创建一个 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: [=10=]) })
}
这是我的 UITableViewCell 子类的代码:
class ConferenceResultsTableViewCell: UITableViewCell {
@IBOutlet weak var gameWinnerControl: UISegmentedControl!
@IBOutlet weak var confidenceTextField: UITextField!
@IBOutlet weak var confidenceAverageAllUsersLabel: UILabel!
}
通常您会在单元格内创建这样的 @IBAction
。根据您的问题,我假设方法 @IBAction func winnerChanged(_ sender: UISegmentedControl)
在您的控制器中某处定义。
如果您通过实施该方法为您的单元格创建一个专用的 class,将会更容易并且也可以解决您的问题。
这将允许您将单元格与具体的 CoreData 对象挂钩(通过下面示例中的标识符)。您需要做的就是从 controller/data 来源的 cellForRow
某处调用 setup
方法。
final class MatchCell: UITableViewCell {
@IBAction func winnerChanged(_ sender: UISegmentedControl) {
...
}
func setup(with match: Match) {
self.matchId = mathc.id
...
}
}
如果您仍然需要在控制器中使用 updateOrCreateGame
方法,您可以在 setup
方法中传递回调 onUpdateRequested: (Match) -> Void
并从 winnerChanged
方法调用该回调。
您可以在下面找到我创建的 UITableViewCell 子类的图像。每个单元格对应一个在两个参赛者之间进行的游戏,并且有一个获胜者,由所选控件定义(在编辑器中显示 "first" 和 "second")。如果这个获胜者值发生变化,我想更新该游戏的信息并将其存储在核心数据中。问题是,当我创建一个 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: [=10=]) })
}
这是我的 UITableViewCell 子类的代码:
class ConferenceResultsTableViewCell: UITableViewCell {
@IBOutlet weak var gameWinnerControl: UISegmentedControl!
@IBOutlet weak var confidenceTextField: UITextField!
@IBOutlet weak var confidenceAverageAllUsersLabel: UILabel!
}
通常您会在单元格内创建这样的 @IBAction
。根据您的问题,我假设方法 @IBAction func winnerChanged(_ sender: UISegmentedControl)
在您的控制器中某处定义。
如果您通过实施该方法为您的单元格创建一个专用的 class,将会更容易并且也可以解决您的问题。
这将允许您将单元格与具体的 CoreData 对象挂钩(通过下面示例中的标识符)。您需要做的就是从 controller/data 来源的 cellForRow
某处调用 setup
方法。
final class MatchCell: UITableViewCell {
@IBAction func winnerChanged(_ sender: UISegmentedControl) {
...
}
func setup(with match: Match) {
self.matchId = mathc.id
...
}
}
如果您仍然需要在控制器中使用 updateOrCreateGame
方法,您可以在 setup
方法中传递回调 onUpdateRequested: (Match) -> Void
并从 winnerChanged
方法调用该回调。