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