快速更改动态创建的标签

时间:2017-05-16 10:08:05

标签: swift macos user-interface

我有一个需要创建动态标签的程序,并在每个标签中将相关数据放入该标签。 出于测试目的,我试图创建一个动态创建1个选项卡的程序,并通过调用函数显示相关数据。 它有两个类:TabsController连接到stoty board上的Tab Controller,PageController是应该创建动态选项卡的类。

问题是,我确实设法制作动态页面,但是尝试更新标签文本不会更新它 - 它保持“Test”值。我可能会把页面生命周期搞得一团糟,但我无法理解。

TabsController:

import Cocoa

class TabsController: NSTabViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewWillAppear() {
        super.viewWillAppear()
        let page1 = PageController()
        page1.changePageNum("1")
        self.addChildViewController(page1)
    }
}

的PageController:

import Cocoa

class PageController: NSViewController {
    var lblHeader = NSTextField(frame: NSMakeRect(20, 20, 120, 20))

    override func viewDidLoad() {
        super.viewDidLoad()
        self.lblHeader.stringValue = "Test"
        self.view.addSubview(self.lblHeader)

    }

    func changePageNum(_ pageNum: String) {
        self.title = "Page \(pageNum)"
        self.lblHeader.stringValue = "Page \(pageNum)"
    }
}

虽然我在那,但我很难找到mac os swift编程的文献。通常我发现的是面向ObjC或iOS。有人知道这个的好消息吗?

感谢。

1 个答案:

答案 0 :(得分:1)

每次出现视图时,您都会分配一个新的PageController。你最终会得到数百PageController个。将其分配为变量,并将其作为子项添加到viewDidLoad

class TabsController: NSTabViewController {
    var pageController = PageController()

    override func viewDidLoad() {
        super.viewDidLoad()
        pageControler.changePageNum("1")
        self.addChildViewController(page1)
    }
}
Ray Wenderlich有很好的Swift文学: https://store.raywenderlich.com/