获取使用storyboard创建的viewcontroller的属性 [英] Get attribute of viewcontroller created with storyboard
问题描述
我目前正在学习swift,我正在尝试从故事板工作中学习实例,但我现在面临的错误并未记录在案。
<我在我的主故事板中创建了一个viewcontroller,我将它的类型指定为我之前调用的自定义类 SimpleNewsViewController ,这里是我班级的代码,它并不复杂:
class SimpleNewsViewController:UIViewController {
@IBOutlet weak var myImage:UIImageView!
@IBOutlet weak var myLabel:UILabel!
@IBOutlet weak var myText:UITextView!
var event:活动!
覆盖func viewDidLoad(){
super.viewDidLoad()
}
}
在我的主要故事板上,这里是我指定的自定义ViewController:
我的故事板实现
现在问题出现了:在我的代码中我实现了我的ViewController感谢instanciateViewController(标识符:NewsView),然后我尝试在这段代码中设置我的3个属性:
...
让storyboard = UIStoryboard(名称:Main,bundle:nil)
让controller = storyboard.instantiateViewController(withIdentifier:NewsView)为! SimpleNewsViewController
//controller.myImage.image = UIImage(名称:image.jpg)
//controller.myText.text =这是一个非常长的例子
//controller.myTitle.text =这是一个标题示例
self.navigationController?.pushViewController(controller,animated:true)
...
如果我取消对三行的评论,我会发错误说:
致命错误:在解包可选值时意外发现nil
IDE还会显示错误代码和线程(如果是可以提供帮助):
错误
在实例化控制器之后,插座尚未连接,您必须声明临时变量并在 viewDidLoad()中设置插座属性
...
let sto ryboard = UIStoryboard(名称:Main,bundle:nil)
让controller = storyboard.instantiateViewController(withIdentifier:NewsView)为! SimpleNewsViewController
controller.tempImage = UIImage(名称:image.jpg)
controller.tempLabel =这是一个非常长的例子
controller.tempText =这是一个标题示例
self.navigationController?.pushViewController(controller,animated:true)
...
class SimpleNewsViewController:UIViewController {
@IBOutlet weak var myImage:UIImageView!
@IBOutlet weak var myLabel:UILabel!
@IBOutlet weak var myText:UITextView!
var tempImage:UIImage?
var tempLabel =
var tempText =
var事件:事件!
覆盖func viewDidLoad(){
super.viewDidLoad()
myImage.image = tempImage
myLabel.text = tempLabel
tempText.text = tempText
}
I'm currently learning swift and I'm trying to learn of instanciation from storyboard works, but the error I'm facing now isn't documented very much.
I created a viewcontroller in my main storyboard and I specified it's type as a custom class I called previously SimpleNewsViewController, here's the code of my class, it is'nt complicated:
class SimpleNewsViewController: UIViewController {
@IBOutlet weak var myImage: UIImageView!
@IBOutlet weak var myLabel: UILabel!
@IBOutlet weak var myText: UITextView!
var event: Events!
override func viewDidLoad() {
super.viewDidLoad()
}
}
On my main storyboard here is the custom ViewController I specified : My Storyboard implementation
Now here's the problem : In my code I instanciate my ViewController thanks to the instanciateViewController(identifier: "NewsView") and then I try to set my 3 attributes like in this piece of code :
...
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "NewsView") as! SimpleNewsViewController
//controller.myImage.image = UIImage(named: "image.jpg")
//controller.myText.text = "this is an example that can be really long"
//controller.myTitle.text = "this is a title example
self.navigationController?.pushViewController(controller, animated: true)
...
If I un-comment the three lines I have an error saying:
Fatal error: Unexpectedly found nil while unwrapping an Optional value
The IDE also displays the error code and the thread (if that can help): The error
Right after instantiating the controller the outlets are not connected yet, you have to declare temporary variables and set the outlet properties in viewDidLoad()
...
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "NewsView") as! SimpleNewsViewController
controller.tempImage = UIImage(named: "image.jpg")
controller.tempLabel = "this is an example that can be really long"
controller.tempText = "this is a title example
self.navigationController?.pushViewController(controller, animated: true)
...
class SimpleNewsViewController: UIViewController {
@IBOutlet weak var myImage: UIImageView!
@IBOutlet weak var myLabel: UILabel!
@IBOutlet weak var myText: UITextView!
var tempImage : UIImage?
var tempLabel = ""
var tempText = ""
var event: Events!
override func viewDidLoad() {
super.viewDidLoad()
myImage.image = tempImage
myLabel.text = tempLabel
tempText.text = tempText
}
这篇关于获取使用storyboard创建的viewcontroller的属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!