我在顶层View Controller中有一个带有两个按钮的OS Mac应用程序和一个Container View。我用标签视图控制器替换了链接到容器视图的视图控制器。我想使用顶级View Controller中的按钮切换选项卡。我接近工作的唯一方法是按如下所示设置按钮操作:
@IBAction func selectCompositions(_ sender: NSButton) {
let tabViewController = self.storyboard?.instantiateController(withIdentifier: "tabViewController") as!NSTabViewController
tabViewController.selectedTabViewItemIndex = 2
let count = tabViewController.selectedTabViewItemIndex
print(count)
}
实例化调用似乎起作用,因为当我添加第三个选项卡时,计数从1更改为2。这是在我添加设置它的指令之前。无论如何,该代码不会更改选项卡。实例化控制器似乎不正确,因为未单击按钮便出现了视图。调用是否仅打算返回到它的链接而不实例化新对象?有没有更严格的方法呢?我尝试了this question的答案。它产生一个错误,指出tabViewController无法解析。我已经将TabViewController的故事板ID设置为tabViewController。
我添加了:
self.selectedTabViewItemIndex = 0
到我创建并链接到TabViewController的类中的viewDidLoad方法。当我运行该应用程序时,索引已更改,但最后一个选项卡(2)仍然显示。当我单击窗口中的选项卡0时,选项卡会更改,但索引的显示保持不变。似乎我可能在调用错误的方法,尽管其他方法似乎都不适合。
我将NSTabViewController类更改为:
class TabViewController: NSTabViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
print("In TabViewController")
switchToDataTab()
}
func switchToDataTab() {
Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil, repeats: false)
}
func switchToDataTabCont(){
self.selectedTabViewItemIndex = 2
}
}
这是上面链接的解决方案的答案。它在链接到控件的控制器中工作正常,但在主控制器按钮操作方法中则无法正常工作。这让我觉得我已经实例化了该类的第二个实例。
添加计时器解决了切换标签的直接问题。我解决了使用委派模式稍有改动的版本来获取按钮来进行切换的问题。我的my question中显示了有关使其正常工作的代码。