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 }