将数据移动到另一个视图控制器,但第二个视图控制器首先加载到第一个视图控制器

时间:2016-05-30 09:10:23

标签: ios swift

我希望当用户在登录视图控制器中登录时,保存的电子邮件显示并滑出菜单视图控制器,但在构建和运行时首先显示滑出菜单。因此该变量不包含任何内容,因为用户尚未在登录视图控制器中登录。

我使用它来声明文本字段中的文本是电子邮件填写

let emailFill:String = self.emailTextfield.text!

并使用

self.labelContainEmail = emailFill

labelContainEmail是顶部的全局变量

var labelContainEmail: String = ""

我正在使用像这样的准备来移动数据

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    if segue.identifier == "yolo"
    {
        let vc = segue.destinationViewController as! SlideOutMenu
        vc.labelContainEmail2 = labelContainEmail
        print(vc.labelContainEmail2) // this don't print anything, but when i print under `self.labelContainEmail = emailFill` it printed out the email
    }
}

在slideOutMenu.swift中,我将此变量放在顶部

var labelContainEmail2: String = ""

并尝试使用

更改标签文本
labelEmail.text = labelContainEmail2
视图中的

确实加载

我该怎么办?请放轻松,我是swift的新手

2 个答案:

答案 0 :(得分:1)

在NSUserDefaults中使用准备segue商店电子邮件

NSUserDefaults.standardUserDefaults().setObject(labelContainEmail , forKey: "email")  // save user email
在slideOutMenu.swift中

并尝试在视图中更改标签文本,确实加载

if (NSUserDefaults.standardUserDefaults().objectForKey("email")) == nil
{ 
    NSUserDefaults.standardUserDefaults().setObject("" , forKey: "email")
}
else
{   
   let emailStr = NSUserDefaults.standardUserDefaults().objectForKey("email") as! String
}

答案 1 :(得分:0)

您可以在此行的顶部使用

**第二视图

class SlideOutMenu: UIViewController {

  var labelContainEmail: String?

    //your code here 
}

从第一个视图到第二个视图的位置。

**使用第一视图

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    if segue.identifier == "yolo"
    {
        let vc = segue.destinationViewController as! SlideOutMenu
        vc.labelContainEmail2 = labelContainEmail
        print(vc.labelContainEmail2) // this don't print anything, but when i print under `self.labelContainEmail = emailFill` it printed out the email
    }
}

我希望它能帮助你,除了明智之外你还可以使用Model Class来传递数据。