Делегаты между viewcontrollers в Swift - PullRequest
3 голосов
/ 29 февраля 2020

Я пытаюсь реализовать делегаты в моем приложении между двумя контроллерами представления, чтобы перезагрузить данные tableView в одном из них, но когда я нажимаю кнопку, ничего не происходит, я проверял это с точками останова, я что-то забыл в моя реализация?

Отправка ViewController

     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
    }

}

Ответы [ 2 ]

3 голосов
/ 03 марта 2020

То, что здесь происходит, это то, что вы создаете ExerciseVC программно, но ваш Main.storyboard создает еще один в ходе сеанса. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} *} *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * НЕ может быть ''}. * и любые ссылки на него, который вы будете использовать, уже созданы UIStoryBoard

0 голосов
/ 29 февраля 2020

Согласно вашему коду вы используете метод IBAction в классе ExerciseV C, это означает, что у вас есть этот контроллер в раскадровке. Но вы инициализируете ExerciseV C как

var alert:ExerciseVC = ExerciseVC()

Это неверно, потому что в этом случае методы IBAction никогда не вызываются. Попробуйте использовать

let storyboard = UIStoryboard(name: "YourStoryboardName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "yourViewControllerID")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...