gpt4 book ai didi

ios - swift 在 View Controller 之间进行委托(delegate)

转载 作者:行者123 更新时间:2023-12-04 19:30:56 48 4
gpt4 key购买 nike

我试图在我的应用程序中实现两个 View Controller 之间的委托(delegate),以便在其中一个 View Controller 中重新加载 tableView 数据,但是当我按下按钮时没有任何反应,我已经用断点对其进行了测试,我是不是忘记了一些东西我的实现?

发送 View Controller

     protocol UpdateDelegate {
func updateExerciseCells()
}

class ExerciseVC: UIViewController {


var delegate:UpdateDelegate?


@IBAction func saveWorkoutPressed(_ sender: Any) {

exercise = Exercise(name: exerciseNameInput.text!, weight: weightInput.text!, reps: repsInput.text!, sets: setsInput.text!, difficulty: "")

WorkoutService.instance.exercises.append(exercise!)


self.delegate?.updateExerciseCells()

dismiss(animated: true, completion: nil)

}
}

接收ViewController

class WorkoutVC: UIViewController, UpdateDelegate {

var alert:ExerciseVC = ExerciseVC()




override func viewDidLoad() {
super.viewDidLoad()
alert.delegate = self
}

func updateExerciseCells() {
//update table
}

}

最佳答案

这里发生的事情是您正在以编程方式创建 ExerciseVC,但是您的 Main.storyboard 正在通过 segue 创建另一个。所以 delegate 在 segue 创建的那个上是 nil。

将此函数添加到您的 WorkoutVC:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? ExerciseVC {
vc.delegate = self
}
}

您可以删除 WorkoutVC 中的 alert 变量,因为您将使用的任何引用都已由 UIStoryBoard 实例化

关于ios - swift 在 View Controller 之间进行委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60467780/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com