Где разместить функцию, передающую данные между контроллерами представления

Я не знаю, как сделать название конкретным, я объясню, что мне нужно здесь.

Мой вопрос:

Это для погодного приложения, где я разрешаю пользователю менять город, для которого он хочет проверить погоду. Проблема в том, что я создал контроллеры представления программно. Это означает, что функция переопределения prepareForSegue не применяется.

Теперь я нашел ответ, что делать вместо prepareForSegue (ниже приведен код), однако, где я должен вызывать функцию, поскольку это не переопределение.

Код:

func prepareForSegue() {
     let changeCityVC = ChangeCityViewController()
     changeCityVC.delegate = self
     present(changeCityVC, animated: true, completion: nil)
}

Спасибо,


person Dadon El-Kadi    schedule 05.09.2018    source источник
comment
Этот ответ отвечает на аналогичный вопрос.   -  person Andreas Pardeike    schedule 05.09.2018
comment
Нет, тот, на который вы ссылаетесь, предполагает, что контроллеры представления были созданы в раскадровке. Я четко заявил, что мои контроллеры представления были созданы программно.   -  person Dadon El-Kadi    schedule 05.09.2018
comment
Ответ четко гласил: «если у вас нет раскадровки». Но, похоже, вы все равно получили ответ.   -  person Andreas Pardeike    schedule 05.09.2018
comment
Я знаю, что видел это, но мне нужен был ответ, где реализовать то, что вы упомянули. Хотя спасибо за подсказку   -  person Dadon El-Kadi    schedule 05.09.2018


Ответы (2)


Ваш метод prepareForSegue на самом деле не готовится к переходу. Он просто создает VC и представляет его. Так что это действительно должно называться presentChangeCityVC или что-то в этом роде.

Что касается того, где вызывать метод, просто вызывайте его всякий раз, когда вы хотите представить свой VC! Предположим, у вас есть кнопка с надписью «Изменить город». Вы можете вызвать метод в цели кнопки:

 func changeCityButtonPressed() {
    presentChangeCityVC()
}
person Sweeper    schedule 05.09.2018
comment
Будьте здоровы! Я так долго пытался найти ответ. Спасибо проверю - person Dadon El-Kadi; 05.09.2018

В голову лезут два варианта:

  1. Добавьте свойство в контроллер представления, которое будет представлено, что-то вроде «titleText». Затем, когда вы создаете этот контроллер представления, установите значение для этого свойства и используйте viewDidLoad, чтобы назначить titleText заголовку контроллера представления, на который вы также переходите.

  2. Создайте протокол и добавьте свойство делегата в новый контроллер представления этого типа. В первом контроллере представления назначьте создателя делегатом. Затем в viewDidLoad (или где-либо еще) новый контроллер представления может запросить у делегата (в данном случае у докладчика) любую информацию, которая ему нужна (например, заголовок).

person ghostatron    schedule 05.09.2018
comment
Спасибо имеет смысл - person Dadon El-Kadi; 05.09.2018