我刚刚开始在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
字符串,但问题是我得到了黑屏。
答案 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