更改ViewController Swift

时间:2015-05-11 17:18:01

标签: iphone swift

我有一个问题。我想在swift中更改视图控制器。

这是我的代码的一部分:

if success == "1" {
    NSLog("Login SUCCESS");

    var prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
    prefs.setObject(mobile, forKey: "USERNAME")
    prefs.setInteger(1, forKey: "ISLOGGEDIN")
    prefs.synchronize()

    self.presentViewController(OtpVC(), animated: true, completion: nil)
}

我的OtpVC文件是:

class OtpVC: UIViewController {
    @IBOutlet weak var smsfield: UITextField!

    @IBAction func continueButton(sender: AnyObject) {
    }



    }

现在的问题是,当登录成功时,页面会发生变化并变黑全部!

我如何解决这个问题?提前谢谢。

3 个答案:

答案 0 :(得分:2)

空白页面表示您的视图尚未加载。似乎就是这样:

请仔细看看,您正在创建该类的实例,但您没有实例化它的视图。

  

在swift中,你可以让单个类影响你的几个视图   故事板。

正确的方法应该是:

if success == "1" {
 NSLog("Login SUCCESS");

 var prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
 prefs.setObject(mobile, forKey: "USERNAME")
 prefs.setInteger(1, forKey: "ISLOGGEDIN")
 prefs.synchronize()

 var storyboard = UIStoryboard(name: "Main", bundle: nil)
  

这里的“Main”应该是 OtpVC 视图所在的故事板的名称。

 var controller = storyboard.instantiateViewControllerWithIdentifier("OtpVC") as! OtpVC
  

“OtpVC”这里应该是您视图的故事板标识符

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

}

<强>更新

另一个根本原因可能是您的标识符未在故事板上设置好。

Identity Inspector 设置应类似于:

enter image description here

  

模块中,就像我的目标上没有这样的类一样,它说

     

这可能是您可能想要查看的内容。也许在您的故事板中,您引用的是其他目标而不是具有此类OptVC类实现的目标。

答案 1 :(得分:1)

您也可以使用segues。

将一个视图控制器中的segue设置为您要在故事板中移动的视图。 还要在故事板中设置segue的标识符。

现在使用以下代码

self.performSegueWithIdentifier("identifier", sender: self)

答案 2 :(得分:1)

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

使用上面的行,您将以编程方式创建OtpVC的新实例。如果这是你想要的并且视图控制器被正确编码以便像那样被初始化那么这不是问题 但是因为它全是黑色的我假设你在故事板中创建了OtpVC所以你要么需要使用像Sukhdeep Singh Kalh建议的segue,要么将其实例化:

let destination = storyboard?.instantiateViewControllerWithIdentifier("identifier") as! OtpVC
presentViewController(destination, animated: true, completion: nil)

这两个选项,您都必须设置标识符。

要为后者设置标识符,请转到故事板并单击视图控制器。单击视图控制器顶部的左侧黄色按钮,确保选择了视图控制器。然后在身份检查器中,键入标识符名称,并在我的示例中将“identifier”替换为该名称。