2017-01-11 6 views
1

Я прошел через сумму тада так сообщений об этом, но ни один из них явно не указать, как получить это сделано в Swift 3.Swift 3 - Закрыть текущее ViewController и Открыть новый ViewController

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

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

//Close current VC 
self.dismiss(animated: true, completion: nil) 

//Open the new VC 
let mainStoryboard: UIStoryboard = UIStoryboard(name:"Main",bundle:Bundle.main) 
let secondViewController: SecondViewController = mainStoryboard.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController 
self.present(secondViewController, animated: true, completion: nil) 

Может кто-то помогает мне? Мне просто нужен простой переход от 1-го VC к 2-му VC и закрытие 1-го VC.

+0

Почему вы пытаетесь уволить текущий V C? – iAnurag

+0

вы отклоняете контроллер и представляете второго контроллера в диспетчере увольнения. Попробуйте представить контроллер представления в rootviewcontroller. – Indrajeet

+1

Правильный способ делегировать parentVC для отклонения вашего текущего, а затем заданного нового, если текущий - это rootVC, то просто установите rootVC снова с помощью 'UIApplication.shared.delegate.window' – Tj3n

ответ

1

Проблема заключается в том, что «я» не может представить новый ViewController, так как это ViewController, который отклоняется.

Вы могли бы попробовать вызвать self.presentingViewController?.present(secondViewController, animated: true, completion: nil)

+0

Спасибо, это был правильный ответ для меня! – GameDev

0

Если вы представили, что контроллер представления из некоторого вида контроллера или это ViewController из навигации или вкладок ViewController, а затем попытаться получить последний видимый контроллер представления, код находится в этой ссылке

Get the current displaying UIViewController on the screen in AppDelegate.m

или же использовать этот код (я скопировал из этой ссылке)

public extension UIWindow { 
    public var visibleViewController: UIViewController? { 
     return UIWindow.getVisibleViewControllerFrom(self.rootViewController) 
    } 

    public static func getVisibleViewControllerFrom(_ vc: UIViewController?) -> UIViewController? { 
     if let nc = vc as? UINavigationController { 
      return UIWindow.getVisibleViewControllerFrom(nc.visibleViewController) 
     } else if let tc = vc as? UITabBarController { 
      return UIWindow.getVisibleViewControllerFrom(tc.selectedViewController) 
     } else { 
      if let pvc = vc?.presentedViewController { 
       return UIWindow.getVisibleViewControllerFrom(pvc) 
      } else { 
       return vc 
      } 
     } 
    } 
} 

Затем представить свой ViewController из этого visibleViewController -

// Закрыть текущий VC

self.dismiss(animated: true, completion: nil) 

// Открываем новый VC

let mainStoryboard: UIStoryboard = UIStoryboard(name:"Main",bundle:Bundle.main) 
let secondViewController: SecondViewController = mainStoryboard.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController 
window?.visibleViewController?.present(secondViewController, animated: true, completion: nil) 

Если ваш контроллер представления является контроллер представления корня, а затем установите это к контроллеру корневого вида

if let delegate = UIApplication.shared.delegate as? AppDelegate { 
    delegate.window?.rootViewController = secondViewController 
} 
+0

это не ответит на вопрос, потому что у вас не будет видимого viewController, если вы отпустите первый и единственный. – zero3nna

+0

Я не мог узнать в его вопросе, что он сказал, что контроллер просмотра - единственный ... не так ли? –

+0

читать заголовок «Закрыть текущий ViewController и открыть новый ViewController» и сообщить мне, в какой момент вы закрываете любой viewController? То, что вы разместили, будет работать, и это обычный способ, но не для этого особого случая. – zero3nna

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