Мне удалось выполнить задачу передачи значения от одного контроллера представления к другому контроллеру представления. У меня были textField и кнопка отправки в одном контроллере представления, а в другом у меня была метка, после того как я дал ввод textField, я смог заменить текст метки текстом textField.

Но теперь я пытаюсь, чтобы при нажатии кнопки «Отправить» в первом контроллере представления он переходил во второй контроллер представления (executeSegue) и одновременно передавал значение третьему контроллеру представления.

Но я получаю сообщение об ошибке, если я делаю это, есть ли простой способ передать значения от одного контроллера представления к третьему контроллеру представления, где я могу пропустить «n» количество контроллеров представления, которые находятся между целью и назначением?

Вот пример:

Предположим, есть три viewController, первый viewController имеет textField и кнопку отправки, второй view-контроллер имеет кнопку «NEXT», а третий View Controller имеет метку.

Когда я ввожу textField и нажимаю на submit, он должен отправить textField.text третьему View Controller и выполнить переход ко второму контроллеру view,

Теперь, когда я нахожусь на втором контроллере представления, он покажет кнопку NEXT. После того, как я нажму «Далее», я перейду к третьему контроллеру View, где он покажет мне первый текст textField View COntroller в метке ...

У меня вопрос, как это сделать? Я просмотрел много видео на YouTube о реализации сегментов, но никто не говорил о том, как передавать данные с одного контроллера представления на другой контроллер представления, пропуская некоторые контроллеры представления.

Надеюсь, вы понимаете мой вопрос.

Ваше время и помощь будут высоко оценены! Благодарю вас

-3
Noob in Swift 20 Авг 2018 в 13:32

3 ответа

Лучший ответ

Назначьте storybordID вашему контроллеру, так как здесь я назначил "HomeVC" (было бы здорово, если бы вы присвоили имя класса и storybordid одинаковым)

  let objthirdController = self.storyboard?.instantiateViewController(withIdentifier: "thirdControllerStoerybordID") as! thirdControllerclassname
  objthirdController.variable = self.variable
   self.navigationController?.pushViewController(objthirdController, animated: true)
0
Mahesh Dangar 20 Авг 2018 в 10:44

Способ, которым вы можете выполнить задачу передачи значения из одного контроллера представления в другой контроллер представления. Повторите то же самое, когда вы находитесь в следующем контроллере, пока не достигнете своего конечного контроллера представления.

0
Vijay Bisht 20 Авг 2018 в 11:34

Вы должны использовать шаблон проектирования Notification Observer, но лучше передать его, бросив контроллер представления, а не передавая непосредственно к целевому ViewController, но вот решение:

struct NotificationKeys {
    static let myKey = "myKey"
}

class SourceViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func yourButtonPressed(_ sender: UIButton) {
        let name = Notification.Name(rawValue: NotificationKeys.myKey)
        NotificationCenter.default.post(name: name, object: nil)
        performSegue(withIdentifier: "identifier", sender: self)
    }
}

Вы также можете передать с объектом, это тоже очень просто с объектом, просто искать данные передачи с помощью NotificationCenter в Google, если вы не понимаете код;)

class DestinationViewController: UIViewController {

    deinit {
        NotificationCenter.default.removeObserver(self)
    }

    @IBOutlet weak var yourLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        createObserver()
    }

    func createObserver() {
        NotificationCenter.default.addObserver(self, selector: #selector(updateLabel(notification:)), name: Notification.Name(rawValue: NotificationKeys.myKey), object: nil)
    }

    @objc func updateLabel(notification:NSNotification) {
        let isText = notification.name.rawValue == NotificationKeys.myKey
        let text = isText ? "\(isText)" : ""
        yourLabel?.text = text
    }
}
0
shndrs 20 Авг 2018 в 11:48
51928861