使用 Swift,我有一个在 viewDidLoad 重写函数中以编程方式创建的 UILabel:
var middleDate = UILabel(frame: CGRect(x: (screenWidth / 2) - 45, y: 0, width: 90, height: 20))
middleDate.text = "3:13:46 PM"
middleDate.font = UIFont(name: "ArialMT", size: 13)
middleDate.textAlignment = .Center
效果很好。
然后我尝试更改覆盖函数viewDidAppear
中的文本。
我收到“构建失败”消息,并显示消息使用未解析的标识符“middleDate”
如果我使用界面生成器并将 UILabel 拖放到 View 上,然后给它一个强有力的引用,它会很好用。有没有办法通过强引用来引用以编程方式创建的对象?
或者我的想法是错误的吗?
这是我的 ViewController.swift 上的内容:
我有一种感觉,有一种更好、更干净的方法可以做到这一点。
override func viewDidLoad() {
super.viewDidLoad()
var middleDate = UILabel(frame: CGRect(x: (screenWidth / 2) - 45, y: 0, width: 90, height: 20))
middleDate.text = "3:13:46 PM"
middleDate.font = UIFont(name: "ArialMT", size: 13)
middleDate.textAlignment = .Center
self.myTopView.addSubview(middleDate)
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
var timer = NSTimer.scheduledTimerWithTimeInterval(1.0,
target: self,
selector: Selector("getLocalTime:"),
userInfo: nil,
repeats: true)
let mainLoop = NSRunLoop.mainRunLoop()
mainLoop.addTimer(timer, forMode: NSDefaultRunLoopMode)
func getLocalTime(timer: NSTimer) {
var todaysDate:NSDate = NSDate()
var dateFormatter:NSDateFormatter = NSDateFormatter()
var centerDateFormatter:NSDateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "h:mm:ss"
var DateInFormat:String = dateFormatter.stringFromDate(todaysDate)
middleDate.text = "hello"
}
}
最佳答案
试试这个:
class ViewController: UIViewController {
var middleDate = UILabel(frame: CGRect(x: (360 / 2) - 45, y: 200, width: 90, height: 20))
override func viewDidLoad() {
super.viewDidLoad()
middleDate.text = "3:13:46 PM"
middleDate.font = UIFont(name: "ArialMT", size: 13)
middleDate.textAlignment = .Center
self.view.addSubview(middleDate)
}
override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated)
middleDate.text = "hello"
}
}
您的问题是在 viewDidLoad 函数中使用本地范围声明了 middleDate。为了使其成为类变量,您需要在类级别声明它。我对类(class)进行了一些简化,只是为了让它能够快速地为我工作。
关于swift - 如何使用 Swift 以编程方式引用 UILabel 强引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26518053/