2016-05-21 3 views
0

В app delegate, с простым приложением, имеющими только два экрана:Swift - доступ к различным View контроллеры в App делегате

  • первого экран представляет собой таблицу View Controller встроенной в навигации контроллере
  • второго экрана является View Controller который используется для добавления элементов в первой таблице экрана с помощью протокола/делегата/
  • непосредственно перейти

И это код didFinishLaunchingWithOptions в app delegate, что я могу сослаться на первый экран, viewController[0]:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

     let navController = self.window?.rootViewController as! UINavigationController 
     let courseListController = navController.viewControllers[0] as! CourseListController 
     courseListController.managedObjectContext = self.managedObjectContext 

     return true 
    } 

Как я могу ссылаться на экраны выше, ниже и рядом с центральным экраном? Пожалуйста, предложите мне решение. Спасибо!

+0

Почему кто-то вниз голос это? –

ответ

0

Перейти к каждому виду контроллера, к которому вы хотите обратиться, и в инспекторе идентификации добавить строку в свой идентификатор StoryBoard.

рядом ссылаться на него из нового ViewController (скажем, XViewController) к (скажем, YViewController) сделать это:

var referencedViewController = self?.storyboard. 
instantiateViewControllerWithIdentifier("referenceViewID") as! YViewController 

self.presentViewController(referencedViewController, 
animated: true, completion: nil) 
1

Это важно иметь в виду, что объекты зрения контроллера для всех " периферийные "контроллеры представлений в вашей доске объявлений фактически не будут существовать до тех пор, пока не будет выполнен переход к ним, поэтому нет способа получить доступ к ним непосредственно из делегата приложения. Вместо этого вам нужно нажимать состояние на каждый контроллер дочернего представления, поскольку он создан, независимо от того, что имеется в контроллере представления источника. Segues - это подходящий способ сделать это.

Возможно, вы захотите присвоить каждому из сегментов из центрального контроллера вида уникальный идентификатор segue в Interface Builder. Нажмите на Segue, введите его здесь:

enter image description here

В центральном контроллере представления, осуществлять prepareForSegue(_:sender:), делать что-то вроде следующего:

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject) { 
    switch segue.identifier { 

    case "SegueIdentifier1": 

     guard let destination = segue.destinationViewController as? ViewController1 else { 
      return 
     } 

     // set up your view controller here 

    case "SegueIdentifier2": 

     guard let destination = segue.destinationViewController as? ViewController2 else { 
      return 
     } 

     // set up your view controller here 

    // add additional segues as required 

    default: 
     break // unknown segue 

    } 
} 
+0

Благодарим за помощь! но я не прошу об использовании функции 'prepareForSegue' для отображения представления по идентификатору. Я сделаю это в контроллерах представления, а не в 'деле делегировать приложение. Фактически я работаю над «CoreData», и я хочу ссылаться на определенный контроллер представления, который я хочу назначить 'managedObjectContext'. –

+0

@LKPhucNguyen Я думаю, вы должны использовать 'prepareForSegue' в любом случае. 'Segue.destinationViewController как? ViewController1' может быть назначен объекту как свойство –

+0

@ChrisVig kudos за хороший ответ –

 Смежные вопросы

  • Нет связанных вопросов^_^