2

使用 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。我收到 Build Failed 消息Use of unresolved identifier 'middleDate'

如果我使用界面生成器并将 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"


    }
}
4

1 回答 1

3

尝试这个:

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。为了使它成为一个类变量,您需要在类级别声明它。我稍微简化了课程,只是为了让它对我来说快速工作。

于 2014-10-23T03:33:18.947 回答