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

标签 swift ios8 uilabel strong-references

使用 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/

相关文章:

ios - 如何在 Swift 中根据字体的行高计算行间距?

ios - 如何在 UITable 的不同部分中存储来自多行的多个文本字段值

ios - 将 QuickType(预测)添加到 iOS 8 中的自定义键盘

ios - 在 Swift 中带有事件的 SpriteKit 按钮

fonts - Xcode 5是否可以在 Storyboard 上更改字体和大小?

ios - 使用数组中的字符串淡入/淡出标签

arrays - 使用减少(到 :_:) to filter adjacent equal elements

ios - 无法通过 Swift For 循环进行迭代

swift - 如何访问 firestore (swift) 中返回的查询结果?

ios - 对于深度链接 URI fbAPP_ID ://,redirect_uri URL 必须是绝对错误