调用其他ViewController会打开一个黑屏

Son*_*war 0 uiviewcontroller ios swift

我刚刚开始开发IOS Swift,现在我被困在一件事上.我想要的是将字符串值从一个传递ViewController给另一个.

第一视图控制器

// on TableCell Click


 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {       
        CommonFunctions.setDefaults("a", value: arr[indexPath.row])
        let viewController = SecondView(passedData:arr[indexPath.row])
        self.presentViewController(viewController, animated: true, completion: nil)
 }
Run Code Online (Sandbox Code Playgroud)

第二个ViewController

var test:String


init(passedData:String){
     self.test = passedData
     super.init(nibName: nil, bundle: nil)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override func viewDidLoad() {
    super.viewDidLoad()
    print(CommonFunctions.getDefaults("a"))
}
Run Code Online (Sandbox Code Playgroud)

我成功地获得了第二个字符串,ViewController但问题是我得到了黑屏.

Rap*_*ira 5

您正在SecondViewController使用此代码初始化黑屏let viewController = SecondView(passedData:arr[indexPath.row]).

这是调用您创建的自定义初始化程序,它没有加载该view属性SecondViewController.

有几种方法可以解决这个问题:

如果您使用的是故事板,则应该使用segue并传递数据,而不是手动初始化视图控制器prepareForSegue.

performSegueWithIdentifier("The identifier of your segue on storyboard", sender: nil)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "The identifier of your segue on storyboard" {
        let secondViewController = segue.destinationViewController as! SecondViewController
        secondViewController.passedData = //data
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你使用的是xib,你应该使用

let secondViewController = SecondViewController(nibName: "Name of your nib file", bundle: NSBundle.mainBundle())
secondViewController.passedData = //data
Run Code Online (Sandbox Code Playgroud)

或者在自定义初始化程序中添加笔尖的笔尖名称:

init(passedData:String){
     self.test = passedData
     super.init(nibName: /*Add your nib name here*/, bundle: nil)
}
Run Code Online (Sandbox Code Playgroud)