在“交换”功能Swift

时间:2018-06-28 07:57:12

标签: ios swift

对此我有些困惑:

上下文

我在tableView内的UIViewController中有一个“锻炼会话”。每个cell都有一个exercise namenumber of reps和一个swap buttonswap 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}}中(“锻炼设置屏幕”) 谢谢大家!

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)

}