如何使用Swift仅使用代码转换到新的视图控制器

Ste*_*Fox 48 ios swift

当用户按下UIButton时,我想从ViewController转换到secondViewController,只使用Swift中的代码.

//Function to transition
func transition(Sender: UIButton!)
{   
    //Current Code, default colour is black
    let secondViewController:UIViewController = UIViewController()
    self.presentViewController(secondViewController, animated: true, completion: nil)

 }
Run Code Online (Sandbox Code Playgroud)

rde*_*mar 61

问题是您的代码正在创建一个空白的UIViewController,而不是SecondViewController.您需要创建子类的实例,而不是UIViewController,

func transition(Sender: UIButton!) {   
    let secondViewController:SecondViewController = SecondViewController()

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

 }
Run Code Online (Sandbox Code Playgroud)

如果你在SecondViewController类中重写了init(nibName nibName:String!,bundle nibBundle:NSBundle!),那么你需要将代码更改为,

let sec: SecondViewController = SecondViewController(nibName: nil, bundle: nil)
Run Code Online (Sandbox Code Playgroud)

  • 对于使用Swift 3的用户,"presentViewController"更改为"present".其他一切都保持不变 (7认同)

小智 36

这对我很有用:

func switchScreen() {
    let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
    if let viewController = mainStoryboard.instantiateViewController(withIdentifier: "yourVcName") as? UIViewController {
        self.present(viewController, animated: true, completion: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)


Saz*_*han 15

迅速

通常我们使用正常过渡,

let next:SecondViewController = SecondViewController()
self.presentViewController(next, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

但有时使用导航控制器时,您可能会遇到黑屏.在这种情况下,你需要使用像,

let next:ThirdViewController = storyboard?.instantiateViewControllerWithIdentifier("ThirdViewController") as! ThirdViewController
self.navigationController?.pushViewController(next, animated: true)
Run Code Online (Sandbox Code Playgroud)

此外,当您从故事板或单个xib调用另一个xib时,上述解决方案都不会保留导航栏.如果您使用导航栏并希望像普通推送一样保留它,则必须使用,

比方说,"MyViewController"是MyViewController的标识符

let viewController = MyViewController(nibName: "MyViewController", bundle: nil)
self.navigationController?.pushViewController(viewController, animated: true)
Run Code Online (Sandbox Code Playgroud)


Lor*_*olt 9

你的代码很好.你得到黑屏的原因是你的第二个视图控制器没有任何东西.

尝试类似的东西:

secondViewController.view.backgroundColor = UIColor.redColor();
Run Code Online (Sandbox Code Playgroud)

现在它显示的视图控制器应该是红色的.

要实际执行某些操作secondViewController,请创建一个子类UIViewController而不是

let secondViewController:UIViewController = UIViewController()
Run Code Online (Sandbox Code Playgroud)

创建第二个视图控制器的实例:

//If using code
let secondViewController = MyCustomViewController.alloc()

//If using storyboard, assuming you have a view controller with storyboard ID "MyCustomViewController"
let secondViewController = self.storyboard.instantiateViewControllerWithIdentifier("MyCustomViewController") as UIViewController
Run Code Online (Sandbox Code Playgroud)