我正在尝试创建一个简单的应用程序,当用户轻按时,标签文本将更改,如下所示。但是,在处理水龙头的功能中,它说标签尚未解决。我相信这是因为标签已加载到LoadView中,并且无法在整个课程中访问(我是初学者Swift用户,所以请原谅我,如果我错了。)这是我的代码:
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
let containerView = UIView (frame: CGRect(x: 0, y: 0, width: 600, height: 600))
containerView.backgroundColor = UIColor.white
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
label.center = CGPoint(x: 160, y: 285)
label.textAlignment = .center
label.text = "Hey"
containerView.addSubview(label)
self.view = containerView
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
view.addGestureRecognizer(tap)
}
@objc func handleTap(sender:UITapGestureRecognizer) {
label.text = "Changed"
}
}
PlaygroundPage.current.liveView = MyViewController()
谢谢!
您已将label
声明为loadView
内部的本地变量 - 这意味着仅在loadView
函数中才能访问。您需要它是一个财产,以便在整个班级中可以访问。
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
var label: UILabel!
override func loadView() {
let containerView = UIView (frame: CGRect(x: 0, y: 0, width: 600, height: 600))
containerView.backgroundColor = UIColor.white
self.label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
self.label.center = CGPoint(x: 160, y: 285)
self.label.textAlignment = .center
self.label.text = "Hey"
containerView.addSubview(self.label)
self.view = containerView
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
view.addGestureRecognizer(tap)
}
@objc func handleTap(sender:UITapGestureRecognizer) {
self.label.text = "Changed"
}
}
PlaygroundPage.current.liveView = MyViewController()
您正在尝试访问loadView()
方法中声明的label
。handleTap()
没有可见性/访问label
。
将label
声明为类变量。
请参阅此处有关声明和范围的更多信息:https://docs.swift.org/swift-book/referencemanual/declarations.html