使用按钮从一个视图控制器转换到另一个视图控制器

问题描述:

因此,我创建了一个包含基本逻辑的登录页面。如果用户名和/或密码为空,则显示错误消息。如果它们已满,则转换到下一页(主页)。我创建了一个第二的ViewController上的脚本中,创造了SecondViewController”我然后限定的相应的ViewController类。‘SecondViewController’使用按钮从一个视图控制器转换到另一个视图控制器

在第一ViewController.swift文件,我使用此代码:

func transition(Sender:UIButton!) 
{ 
    let secondViewController: SecondViewController = SecondViewController() 
    self.presentViewController(secondViewController, animated:true, completion:nil) 

} 

然而,当我测试它时,按下登录按钮(当用户名和密码都填满后)将我转移到黑屏而不是第二个视图控制器。有什么想法做什么?

如果你想在视图包含的东西加到它的故事板,你可以给它一个故事板ID(一下面的几个框,您可以在故事板中设置视图控制器的类)。

如果你给它例如ID“secondVC”你可以创建使用以下它:

let secondViewController = storyboard?.instantiateViewControllerWithIdentifier("secondVC") as? SecondViewController 
+0

这工作!非常感谢! –

你不能使用默认的初始化方法初始化视图控制器。

您应该在故事板中创建一个视图控制器场景,在其上添加一个唯一的标识符,使用instantiateViewControllerWithIdentifier:实例化它,然后像显示它一样进行显示。

+0

可以_totally_使用默认初始化一个视图控制器init方法,你只是不能指望视图会从故事板中填充。 – paulrehkugler

+0

或根本没有人口。它的视图对象将是空白的。因此,唯一有用的视图控制器类型是重写loadView以手动创建视图层次结构的视图控制器。 –

+0

从XIB加载视图控制器时存在相同的问题。你应该使用'initWithNibName:bundle:' –

您需要在Storyboard中的视图控制器之间进行切换,并调用self.performSegueWithIdentifier()

或者你可以给你`的UIViewController的标识符和编程来表示它太:

let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil) 
let secondViewController storyboard.instantiateViewControllerWithIdentifier("") as? SecondViewController 
if let secondViewController = secondViewController { 
    self.presentViewController(secondViewController, animated:true, completion:nil) 
} 

基本上有三种方法可以做到这一点

1)创建赛格瑞的故事板,但如果你从该项目

2单赛格瑞使用prepareforSegue和performSegue方法在呈现视图控制器 覆盖FUNC prepareForSegue(赛格瑞它只会工作):UIStoryboardSegue,发件人:AnyObject){

if segue.identifier == "YourIdentifier" { 
    let controller = segue.destinationViewController as!secondViewController 
} 

}

然后在你的IBAction为使用此

performSegueWithIdentifier("YourIdentifier", sender:sender) 

3)(建议一)

let controller = self.storyboard?.instantiateViewControllerWithIdentifier("ContactsVC")! as! ContactsVC 

self.presentViewController(controller, animated:true, completion:nil