Swift - 从外部设置一个 UI 元素
Swift - Set a UI element from outside
我有这个 UIViewController
import UIKit
class UIViewController1: UIViewController {
@IBOutlet weak var someTitle: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
当我从另一个视图控制器实例化它时,我试图设置 someTitle
:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(animated: Bool) {
let stb = UIStoryboard(name: "Main", bundle: nil)
let vc1 = stb.instantiateViewControllerWithIdentifier("someSTBID") as! UIViewController1
vc1.someTitle.text = "My Title" // it fails here!!!!!
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
它在上面一行失败的原因是我试图强制解包一个 nil 可选的,它是 someTitle
.
请告诉我在这种情况下设置 someTitle
的方法。
你需要它进入超类 viewDidAppear 吗,因为如果你把它放在超类 viewDidLoad() 中它应该可以工作。希望对您和未来的观众有所帮助。
您的第二个 UIViewController
尚未加载,因此 someTitle
IBOutlet 将为零。您有两个选择:
- 简单的一个:你强制加载第二个
UIViewController
,例如:vc1.view
就够了然后你设置它(我不推荐这个)
- 正确的:你让第二个
UIViewController
负责在正确的时间设置自己的标题。如果你需要传递 "My title"
,你可以简单地通过像 configureVc(title: String)
这样的函数传递它,或者通过暴露一个像 var title: String
这样的变量,所以在第二个 viewDidLoad
=10=] 你会 someTitle.text = title
。
我有这个 UIViewController
import UIKit
class UIViewController1: UIViewController {
@IBOutlet weak var someTitle: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
当我从另一个视图控制器实例化它时,我试图设置 someTitle
:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(animated: Bool) {
let stb = UIStoryboard(name: "Main", bundle: nil)
let vc1 = stb.instantiateViewControllerWithIdentifier("someSTBID") as! UIViewController1
vc1.someTitle.text = "My Title" // it fails here!!!!!
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
它在上面一行失败的原因是我试图强制解包一个 nil 可选的,它是 someTitle
.
请告诉我在这种情况下设置 someTitle
的方法。
你需要它进入超类 viewDidAppear 吗,因为如果你把它放在超类 viewDidLoad() 中它应该可以工作。希望对您和未来的观众有所帮助。
您的第二个 UIViewController
尚未加载,因此 someTitle
IBOutlet 将为零。您有两个选择:
- 简单的一个:你强制加载第二个
UIViewController
,例如:vc1.view
就够了然后你设置它(我不推荐这个) - 正确的:你让第二个
UIViewController
负责在正确的时间设置自己的标题。如果你需要传递"My title"
,你可以简单地通过像configureVc(title: String)
这样的函数传递它,或者通过暴露一个像var title: String
这样的变量,所以在第二个viewDidLoad
=10=] 你会someTitle.text = title
。