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

时间:2016-01-21 04:59:22

标签: ios swift uiviewcontroller

我刚刚开始在Swift开发IOS,现在我被困在一件事上。我想要的是将一个字符串值从一个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)
 }

第二个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"))
}

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

2 个答案:

答案 0 :(得分:5)

由于您使用此代码SecondViewController初始化let viewController = SecondView(passedData:arr[indexPath.row]),您将收到黑屏。

这是调用您创建的自定义初始化程序,它未加载view的{​​{1}}属性。

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

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

prepareForSegue

如果您使用的是xib,则应使用

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
    }
}

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

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

答案 1 :(得分:-1)

试试这个

   self.modalTransitionStyle = UIModalTransitionStyle.CoverVertical 
    // Cover Vertical is necessary for CurrentContext 
    self.modalPresentationStyle = .CurrentContext 
    // Display on top of    current UIView
    self.presentViewController(secondViewController(), animated: true, completion: nil)

并在您的第二个视图控制器中

view.backgroundColor = UIColor.clearColor()
view.opaque = false