2017-02-07 14 views
0

У меня есть приложение, которое использует 3D Touch, чтобы перейти к определенному VC в моем приложении. Проблема в том, что когда приложение запускается нормально, все мои VC встроены в контроллер просмотра навигации. Но поскольку я пропускаю последовательность запуска и прыгаю прямо в VC, VC, с которым я перехожу, не встроен в Nav VC.Пытается внедрить VC в NavigationVC из performActionFor shortcutItem через 3d touch на значок приложения

Вот что я пытаюсь в App Делегат

func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) { 

    guard TouchActions(rawValue: shortcutItem.type) != nil else { 
     print("3d not working") 
     completionHandler(false) 
     return 
    } 

    print("3d touch workig") 

    let mainStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let addPersonVC : AddPersonViewController = mainStoryboard.instantiateViewController(withIdentifier: "AddPerson") as! AddPersonViewController 
    // pass the stack to the addPersonVC 
    addPersonVC.coreDataStack = coreDataStack 


    let navController:UINavigationController = mainStoryboard.instantiateViewController(withIdentifier: "navController") as! UINavigationController 
    navController.pushViewController(addPersonVC, animated: true) 


    // self.window? = UIWindow(frame: UIScreen.main.bounds) 
    self.window?.rootViewController = navController 
    self.window?.makeKeyAndVisible() 

    completionHandler(true) 
} 

Этот код работает, но когда я пытаюсь выйти из этого VC, приложение просто сидит там отвечать на запросы. Мне как-то нужно встроить addPersonVC в основной Nav VC, который настроен в раскадровке. (Встроенный контроллер навигации был создан в раскадровке, упаковывают, что имеет значение.)

ответ

2

Option1: Добавить Storyboard Identifier в свой UINavigationController и экземпляр UINavigationController вместо этого.

Вариант2: Удалить UINavigationController из раскадровки. Просто введите код initialize a new UINavigationController и введите программный код rootView.

Я не Swift разработчика, но так как вы не видите примеры, которые я написал, я сделал несколько быстрого склеивания, чтобы помочь вам понять основы, попробуйте этот код:

let mainStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let addPersonVC : AddPersonViewController = mainStoryboard.instantiateViewController(withIdentifier: "AddPerson") as! AddPersonViewController 
    // pass the stack to the addPersonVC 
    addPersonVC.coreDataStack = coreDataStack 

let navController:UINavigationController = mainStoryboard.instantiateViewController(withIdentifier: "navController") as! UINavigationController 
    navController.viewControllers = [addPersonVC] 


    self.window?.rootViewController?.present(navController, animated: true, completion: nil) 
    self.window?.makeKeyAndVisible() 
+0

Я пытался сделать тебя первым вариант, но он, похоже, не работает. Какие-либо предложения? Я обновил свой вопрос выше, чтобы показать вам, что я пытаюсь. – icekomo

+0

@icekomo Я не программист Swift, однако, решение было в option2 для Swift. Теперь ваш обновленный код полностью перепутался. Вам необходимо добавить ** AddPersonViewController ** как ** rootViewController ** в ваш UINavigationController. Также вы не можете «нажимать» «addPersonVC», вам нужно ** self.window? .rootViewController = navigationController **, проверьте ссылку option2, как я сказал, для примера Swift вы увидите ответ там m8. –

+0

@icekomo http://stackoverflow.com/questions/26753925/set-initial-viewcontroller-in-appdelegate-swift Вы можете проверить здесь еще один ответ для Swift. –

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

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