对此我有些困惑:
上下文
我在tableView
内的UIViewController
中有一个“锻炼会话”。每个cell
都有一个exercise name
,number of reps
和一个swap button
。 swap button
从练习库中生成一个新练习(即,如果它说“卧推”,但您没有卧推,则可以将其换成其他东西)。
问题
我的swap button
代码有效,并且新的练习填充了该单元格。但是,当我在锻炼计时器上按“播放”时,它将重置为以前的状态!
代码-交换按钮
func swapButtonTapped(cell: WorkoutCell) {
let realmExercisePool = realm.objects(ExerciseGeneratorObject.self)
let index = Int(arc4random_uniform(UInt32(realmExercisePool.count)))
let newExercise = realmExercisePool[index].generateExercise()
cell.exerciseName.text = newExercise.name
cell.repsNumber.text = String(newExercise.reps)
}
代码-计时器
@IBAction func timerControlTapped(_ sender: UIButton) {
if isTimerRunning == false {
sender.setImage(#imageLiteral(resourceName: "timerPause"), for: UIControlState.normal)
runTimer()
isTimerRunning = true
swapButtonEnabled = false
workoutTableView.reloadData()
} else {
sender.setImage(#imageLiteral(resourceName: "timerPlay"), for: UIControlState.normal)
workoutTimerObject.invalidate()
isTimerRunning = false
}
}
代码-运行计时器
func runTimer() {
workoutTimerObject = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(WorkoutViewController.workoutTimer), userInfo: nil, repeats: true)
isTimerRunning = true
}
原始练习组从上一个VC传递到array
的{{1}}中(“锻炼设置屏幕”)
谢谢大家!
答案 0 :(得分:0)
对于其他有类似问题的人,我设法解决了。
之所以发生这种情况,是因为我只是在更改swapButtonTapped
中单元格的“内容”,而不是实际数据源。
然后我在reloadData()
中调用“ timerControlTapped
”时,它正在重新加载原始数据。
我需要做的是通过用“ selectedWorkoutExerciseArray
”中的新索引替换选定索引处的练习来替换实际数据。
我使用了以下代码:
func swapButtonTapped(cell: WorkoutCell) {
let myIndexPath = workoutTableView.indexPath(for: cell)
let realmExercisePool = realm.objects(ExerciseGeneratorObject.self)
let index = Int(arc4random_uniform(UInt32(realmExercisePool.count)))
let newExercise = realmExercisePool[index].generateExercise()
selectedWorkoutExerciseArray[(myIndexPath?.row)!] = newExercise
cell.exerciseName.text = newExercise.name
cell.repsNumber.text = String(newExercise.reps)
}