Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 快速更改动态创建的标签_Swift_Macos_User Interface - Fatal编程技术网

Swift 快速更改动态创建的标签

Swift 快速更改动态创建的标签,swift,macos,user-interface,Swift,Macos,User Interface,我有一个程序,需要创建动态选项卡,并在每个选项卡中为该选项卡添加相关数据。 出于测试目的,我尝试制作一个程序,动态创建1个选项卡,并通过调用函数显示相关数据。 它有两个类:TabsController,它连接到stoty板上的Tab控制器,以及PageController,它是应该创建动态选项卡的类 问题是,我确实设法创建了动态页面,但尝试更新标签文本并不会更新它——它会保留“Test”值。我可能把页面的生命周期搞砸了,但我不明白是什么 选项卡控制器: import Cocoa class T

我有一个程序,需要创建动态选项卡,并在每个选项卡中为该选项卡添加相关数据。 出于测试目的,我尝试制作一个程序,动态创建1个选项卡,并通过调用函数显示相关数据。 它有两个类:
TabsController
,它连接到stoty板上的Tab控制器,以及
PageController
,它是应该创建动态选项卡的类

问题是,我确实设法创建了动态页面,但尝试更新标签文本并不会更新它——它会保留“Test”值。我可能把页面的生命周期搞砸了,但我不明白是什么

选项卡控制器:

import Cocoa

class TabsController: NSTabViewController {

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

    override func viewWillAppear() {
        super.viewWillAppear()
        let page1 = PageController()
        page1.changePageNum("1")
        self.addChildViewController(page1)
    }
}
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)"
    }
}
页面控制器:

import Cocoa

class TabsController: NSTabViewController {

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

    override func viewWillAppear() {
        super.viewWillAppear()
        let page1 = PageController()
        page1.changePageNum("1")
        self.addChildViewController(page1)
    }
}
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)"
    }
}
当我在做这件事的时候,我真的很难找到MacOSSwift编程的资料。通常我发现的是面向ObjC或iOS的。有人知道这个的好消息来源吗


谢谢。

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

class TabsController: NSTabViewController {
    var pageController = PageController()

    override func viewDidLoad() {
        super.viewDidLoad()
        pageControler.changePageNum("1")
        self.addChildViewController(page1)
    }
}
Ray Wenderlich拥有优秀的Swift文学作品:

将调度与主线程一起使用并更新它。它似乎不起作用。。不应该这样做吗?:
DispatchQueue.main.async{page1.changePageNum(“1”)}
谢谢,它确实能够正确调用changePageNum。但文本字段仍然没有更新。搜索web建议我按照Salman的建议将其发送到主队列,但它还不起作用