我已经浏览了大量关于此事的SO帖子,但没有一个明确说明如何在Swift 3中完成此任务。
简单地说,我需要关闭显示的当前视图并打开一个新的视图控制器。这样唯一的视图控制器打开就是第二个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)
有人可以帮帮我吗?我只需要从第一个VC到第二个VC的简单转换,然后关闭第一个VC。
答案 0 :(得分:2)
经过一整天的忙碌之后,我在Apple的开发人员网站上(在此link上)找到了一个解决方案
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondVC = storyboard.instantiateViewController(identifier: "second_view_controller")
secondVC.modalPresentationStyle = .fullScreen
secondVC.modalTransitionStyle = .crossDissolve
present(secondVC, animated: true, completion: nil)
答案 1 :(得分:1)
问题在于,"自我"无法呈现新的ViewController,因为它是被解雇的ViewController。
您可以尝试拨打self.presentingViewController?.present(secondViewController, animated: true, completion: nil)
答案 2 :(得分:0)
如果您从某个视图控制器中呈现了该视图控制器,或者它是来自导航或选项卡视图控制器的视图控制器,那么尝试获取最后一个可见的视图控制器,代码在此链接中
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
}
}
}
}
然后从那个visibleViewController -
呈现你的viewcontroller//关闭当前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
}