Просмотр контроллера с 2 пунктами назначения - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть 2 кнопки в контроллере вида. Если нажата кнопка 1, перейдите к контроллеру WebView. Если нажата кнопка 2, перейдите к контроллеру ArtView.

Как заставить override func prepare(for segue: UIStoryboardSegue, sender: Any?) иметь 2 пункта назначения в зависимости от нажатой кнопки?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Пусть каждая кнопка вызывает различные переходы, либо перетаскивая сегменты управления с помощью перетаскивания непосредственно с кнопки, либо путем вызова performSegue(withIdentifier:sender:) из кода IBAction ваших кнопок.

Затем используйте код в prepare(for:sender:), чтобы выяснить, какой пункт назначения вызывается.

Вы можете:

  1. Проверка идентификатора при переходе (не рекомендуется - хрупкий)
  2. Проверьте класс контроллера представления назначения (лучше, чем 1)
  3. Пусть каждый контроллер представления реализует протокол и проверяет протокол назначения:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    switch segue.destination { 
       case let webView as WebViewProtocol:
         //Your code for a web view
       case let artView as ArtViewProtocol:
         //Your code for an Art View
    }
}

Вариант 3 надежен, обеспечивая слабую связь (в каждом случае может запускаться любой контроллер представления, соответствующий требуемому протоколу. Все, что ему нужно знать, это то, что пункт назначения понимает требуемый протокол.)

0 голосов
/ 07 ноября 2018
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? WebViewController {
        // your code
    }
    if let destination = segue.destination as? ArtViewController {
        // your code
    }
}

Надеюсь, это поможет! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...