我正在尝试从其他类访问变量。我在做什么错了?
class ViewController: UIViewController {
var restaurantName = "Test"
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func btnClicked(_ sender: Any) {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()){
let pop = popView()
self.view.addSubview(pop)
}
}
}
这是我尝试从其访问的类:
class popView: UIView{
fileprivate let titleLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.font = UIFont.systemFont(ofSize:28, weight: .bold)
label.textAlignment = .center
//label.text = "TITLE"
label.text = restaurantName
return label
}()
}
如何访问“ popView”类中的“ restaurantName”变量?
预先感谢
答案 0 :(得分:3)
您不想紧密耦合视图和视图控制器。
您应该在PopView
上有一个属性来保存文本。然后,您可以在创建PopView
实例时为此属性分配一个值。
class PopView: UIView{
fileprivate let titleLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.font = UIFont.systemFont(ofSize:28, weight: .bold)
label.textAlignment = .center
//label.text = "TITLE"
label.text = restaurantName
return label
}()
var titleText: String? {
didSet {
self.titleLabel.text = titleText
}
}
}
class ViewController: UIViewController {
var restaurantName = "Test"
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func btnClicked(_ sender: Any) {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()){
let pop = popView()
pop.titleText = restaurantName
self.view.addSubview(pop)
}
}
}
答案 1 :(得分:0)
由于“ popupView”类是“ ViewController”的实例,因此您无法访问“ popView”类中的“ restaurantName”变量。
如果要将属性“ restaurantName”分配给“ titleLabel”,只需从属性“ titleLabel”中删除“ fileprivate”,然后将此行添加到“ addSubview”函数之前。
pop.titleLabel.text = restaurantName
还将您的“ popView”类更改为以下
class popView: UIView{
weak var titleLabel: UILabel!
func awakeFromNib() {
super.awakeFromNib()
titleLabel = UILabel()
titleLabel.translatesAutoresizingMaskIntoConstraints = false
titleLabel.font = UIFont.systemFont(ofSize:28, weight: .bold)
titleLabel.textAlignment = .center
}