Swift presentViewController

我编程方式有一个iOS Swift项目中的多个视图控制器。 我没有故事板,并希望尽可能避免它们。 有没有办法切换到另一个viewcontroller.swift文件(我们将其称为view2.swift ),并将其作为一个button调用的函数的一部分?
我已经尝试了以下内容:

 let storyboard: UIStoryboard = UIStoryboard(name: "myTabBarName", bundle: nil) let vc: UIViewController = storyboard.instantiateViewControllerWithIdentifier("myVCID") as UIViewController self.presentViewController(vc, animated: true, completion: nil) 

上面的故事板的作品,但我想另一个view2.swift被调用。 可以这样做吗?

尝试这个:

 let vc = ViewController() //change this to your class name self.presentViewController(vc, animated: true, completion: nil) 

用Swift3:

 self.present(vc, animated: true, completion: nil) 

对于那些获得空白/黑屏的代码为我工作。

 let vc = self.storyboard?.instantiateViewControllerWithIdentifier("myVCId") as! MyVCName self.presentViewController(vc, animated: true, completion: nil) 

要为你的VC设置“标识符”,只需要在故事板中的VC身份检查员。 将“Storyboard ID”设置为您想要识别的内容。 看下面的图片以供参考。

作为参考,因为这个问题是谷歌的第一个结果之一。

打破Swift 3中的变化:

presentViewController方法被present的方法所取代。

你可以像老一样使用它:

 self.present(viewControllerToPresent, animated: true, completion: nil) 

示例打开相机:

 let imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.camera imagePicker.allowsEditing = false self.present(imagePicker, animated: true, completion: nil) 

使用Swift 2.1+

  let vc = self.storyboard?.instantiateViewControllerWithIdentifier("settingsVC") as! SettingsViewController self.presentViewController(vc, animated: true, completion: nil) 

在这里输入图像说明

Swift 3

 let vc = self.storyboard?.instantiateViewController(withIdentifier: "idMyViewControllerName") as! MyViewControllerName self.present(vc, animated: true, completion: nil) 

对我来说,我在两个独立的导航控制器中有两个视图。 我不得不使用上述的组合。

 var vc = self.storyboard?.instantiateViewControllerWithIdentifier("WelcomeViewController") as! WelcomeViewController var navigationController = UINavigationController(rootViewController: vc) self.presentViewController(navigationController, animated: true, completion: nil) 

Swift 3.x

  let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "VC-ID" as! yourViewController let navigationVC = UINavigationController(rootViewController: secondVC) self.present(navigationVC, animated: true, completion: nil) 

只需使用这个:确保使用nibName,否则预加载的xib视图不会显示:

var vc : ViewController = ViewController(nibName: "ViewController", bundle: nil) //将其改为你的类名

  self.presentViewController(vc, animated: true, completion: nil) 

通过添加导航控制器并以rootVC设置第二个视图控制器来解决黑屏。

 let vc = ViewController() var navigationController = UINavigationController(rootViewController: vc) self.presentViewController(navigationController, animated: true, completion: nil 

你可以使用下面的代码:

 var vc = self.storyboard?.instantiateViewControllerWithIdentifier("YourViewController") as! YourViewController; vc.mode_Player = 1 self.presentViewController(vc, animated: true, completion: nil) 

另一种可能是你的Build目标中没有包含XIB(这是我发生的事情)。

这可能会发生,如果你有一个不同的开发目标,testing和发布构build(你应该有)。

你可以使用代码:

 if let vc = self.storyboard?.instantiateViewController(withIdentifier: "secondViewController") as? secondViewController { let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.window?.rootViewController = vc }