繁体   English   中英

Swift:以编程方式导航到ViewController并传递数据

[英]Swift: Programmatically Navigate to ViewController and Pass Data

我最近开始学习swift,到目前为止一直很好。 目前我在尝试在视图控制器之间传递数据时遇到问题。 我设法弄清楚如何使用导航控制器以编程方式在两个视图控制器之间导航。 现在唯一的问题是我很难弄清楚如何将用户输入的三个字符串(对于json api)传递给下一个视图。

这是我目前的尝试。 任何帮助深表感谢!

视图控制器:

/* Get the status code of the connection attempt */
func connection(connection:NSURLConnection, didReceiveResponse response: NSURLResponse){

    let status = (response as! NSHTTPURLResponse).statusCode
    //println("status code is \(status)")

    if(status == 200){

        var next = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController
        self.presentViewController(next, animated: false, completion: nil)
    }
    else{

        RKDropdownAlert.title("Error", message:"Please enter valid credentials.", backgroundColor:UIColor.redColor(), textColor:UIColor.whiteColor(), time:3)
        drawErrorBorder(usernameField);
        usernameField.text = "";
        drawErrorBorder(passwordField);
        passwordField.text = "";
    }
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    let navigationController = segue.destinationViewController as! UINavigationController
    let newProjectVC = navigationController.topViewController as! SecondViewController
    newProjectVC.ip = ipAddressField.text
    newProjectVC.username = usernameField.text
    newProjectVC.password = passwordField.text
}

SecondViewController:

import UIKit

class SecondViewController: UIViewController {

var ip:NSString!
var username:NSString!
var password:NSString!

override func viewDidLoad() {
    super.viewDidLoad()

    println("\(ip):\(username):\(password)")
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

当应用程序的故事板执行segue(使用Interface Builder在故事板中创建的连接)时,将调用prepareForSegue方法。 在上面的代码中,您将使用presentViewController自己呈现控制器。 在这种情况下,不会触发prepareForSegue 您可以在呈现控制器之前立即进行设置:

let next = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController
next.ip = ipAddressField.text
next.username = usernameField.text
next.password = passwordField.text
self.presentViewController(next, animated: false, completion: nil)

你可以在这里阅读更多关于segue的内容

更新了Swift 3的语法:

    let next = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController 
    next.ip = ipAddressField.text
    next.username = usernameField.text
    next.password = passwordField.text
    self.present(next, animated: true, completion: nil)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM