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但问题是我得到了黑屏.
您正在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)
| 归档时间: |
|
| 查看次数: |
1255 次 |
| 最近记录: |