2016-10-13 1 views
0

У меня есть несколько segues от одного viewController к другому viewController. В destinationViewController у меня есть Label и Text View, который изменяется в соответствии с идентификатором. Конечно, я могу управлять этим без идентификаторов, а просто копировать и вставлять viewControllers, а также делать свою раскадровку еще больше, писать больше кода. Но я хочу научиться писать хороший код. Поэтому, пожалуйста, помогите мне решить проблему.Содержимое viewcontroller изменяется в соответствии с идентификатором segue

У меня есть такая картина в моей раскадровке: storyboard

Таким образом, каждая кнопка имеет свой собственный идентификатор. Я не передаю какие-либо данные из О viewController, я просто изменяю данные внутри History View Controller. Вот почему мне нужно решить проблему без использования функции prepareForSegue (потому что снова я не передаю никаких данных). И если я буду использовать prepareForSegue, тогда мне нужно будет управлять протоколами, а это значит больше кода.

+0

Вам необходимо либо передать данные с первого контроллера точки зрения во второй, либо создать три отдельных контроллера вида в раскадровке для перехода на. – dan

+0

Как второй контроллер распознает, какие данные нужно показывать? Вы не можете делать это без передачи некоторых данных. –

+0

@AndrewVeresov единственными переданными данными является идентификатор –

ответ

0

это быстрый пример того, как вы можете это сделать.

//specify enum 
    enum SegueType: Int { 
     case history, about, howto 
    } 

    class AboutVC: UIViewController { 

     //button pressing 
     @IBAction func didPressHistoryButton(sender: UIButton) { 
       let segueIdent = "show.History" 
       self.performSegue(withIdentifier: segueIdent, sender: SegueType.history) 
     } 

     // in your about vc 
     func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
      if let destinationVC = segue.destination as? HistoryVC { 
       destinationVC.segueType = sender as? SegueType 
      } 
     } 
    } 

    // in your history vc 
    class HistoryVC: UIViewController { 

     var segueType: SegueType? = nil 

     override func viewDidLoad() { 
      super.viewDidLoad() 

       switch segueType! { 
       case SegueType.history: 
        // segue from history button 
        break 
       case SegueType.about: 
        // segue from about button 
        break 
       case SegueType.howto: 
       // segue from how to button\ 
        break 
       default: 
        // segue from ??? 
        break 
       } 
     } 
    } 
+0

У меня ошибка: «Невозможно преобразовать значение типа« SegueType »в ожидаемый тип аргумента« AnyObject? »« –

+0

Я забыл сказать, что я использую Swift 2.3 –

+0

Так что отредактируйте свой вопрос, чтобы показать новый кода внизу, а также сообщить нам, какая строка дает вам ошибку. –