Я подаю заявку на должность младшего разработчика, и у меня есть очень конкретная задача, на выполнение которой у меня уже ушло 3 дня. Звучит просто - передавайте данные в rootViewController. Вот что я сделал:
1)
private func userDefaultsToRootController() {
let input = textField.text!
defaults.set(input, forKey: "SavedLabel")
navigationController?.popViewController(animated: true)
}
частная функция segueToRootViewController () {let destinationVC = MainScreen1 () let input = textField.text!
if input == "" { self.navigationController?.popToRootViewController(animated: true) } destinationVC.input = input navigationController?.pushViewController(destinationVC, animated: true)
}
private func popToNavigationController() {
let input = textField.text!
if let rootVC = navigationController?.viewControllers.first as? MainScreen1 {
rootVC.input = input
}
navigationController?.popToRootViewController(animated: true)
}
- I've used CoreData
Но вот трудная часть - у меня есть электронное письмо, что все эти методы недостаточно хороши, и мне нужно использовать делегат и закрытие. Раньше я выполнял делегирование и закрытие, но когда я метод делегата popToRootViewController передает nil. Не могли бы вы хотя бы указать, где найти информацию об этом?
** ДОБАВЛЕН **
Есть 2 контроллера просмотра: начальный и второй. Вот что у меня есть в контроллере начального представления:
var secondVC = MainScreen2()
override func viewDidLoad() {
super.viewDidLoad()
secondVC.delegate = self
}
Вот как я нажимаю SecondViewController
@objc private func buttonTapped(_ sender: CustomButton) {
let nextViewController = MainScreen2()
navigationController?.pushViewController(nextViewController, animated: true)
}
В SecondViewController у меня есть этот протокол
protocol PassData {
func transferData(text: String)
}
Также делегат:
var delegate: PassData?
Вот как я возвращаюсь к исходному контроллеру представления
@objc private func buttonTapped(_ sender: CustomButton) {
if let input = textField.text {
print(input)
self.delegate?.transferData(text: input)
self.navigationController?.popToRootViewController(animated: true)
}
}
Вернемся к контроллеру начального представления, где я реализовал метод делегата
extension MainScreen1: PassData {
func transferData(text: String) {
print("delegate called")
label.text = text
}
}
Делегату не звонят.
buttonTapped
функции, а не вviewDidLoad
. Это не тот экземпляр, который вы вставляете в стек - person Mat   schedule 23.06.2020