获取使用storyboard创建的viewcontroller的属性 [英] Get attribute of viewcontroller created with storyboard

查看:134
本文介绍了获取使用storyboard创建的viewcontroller的属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在学习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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆