如何使用Swift以编程方式引用UILabel强引用?

如何使用Swift以编程方式引用UILabel强引用?,swift,ios8,uilabel,strong-references,Swift,Ios8,Uilabel,Strong References,使用Swift,我有一个UILabel,它是在viewDidLoad override函数中以编程方式创建的: 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) mid

使用Swift,我有一个UILabel,它是在viewDidLoad override函数中以编程方式创建的:

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
这很有效

然后,我尝试更改覆盖函数
viewdide
中的文本。 我获取生成失败,消息为
使用未解析的标识符“middleDate”

如果我使用interface builder并在视图上拖放UILabel,那么给它一个强大的引用,它会非常有用。有没有方法用强引用引用以编程方式创建的对象

还是我的做法不对


这是我的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"
    }
}

您的问题是middleDate是在viewDidLoad函数中使用本地作用域声明的。为了使它成为类变量,您需要在类级别声明它。我简化了一点类,只是为了让它对我来说运行得更快。

有一个类成员:“var middleDate:UILabel?”。在viewDidLoad和ViewDidDisplay中使用相同的选项。我正在向viewDidLoad和ViewDidDisplay中添加“var middleDate:UILabel”,并且出现错误。错误:UILabel没有名为“text”的成员。在哪里创建了UILabel并将其添加到子视图我也遇到了错误您提供的代码没有在视图上显示UILabel。它生成一个包含UILabel的局部变量,该UILabel在viewDidLoad退出后立即重新初始化。如果稍后将标签添加到视图中,如何在视图中获得对标签的引用?你不显示代码。简言之,我们需要看到更多的代码。对于一些独特的标签,这是一种方法,但是如果我创建一个UILabel数组作为更新的一部分进行迭代,那么这超出了我的知识范围