我的顶级视图控制器中有一个带有两个按钮和一个容器视图的 OS Mac 应用程序。我用选项卡视图控制器替换了链接到容器视图的视图控制器。我想使用顶级视图控制器中的按钮切换选项卡。我让它接近工作的唯一方法是设置按钮操作如下:
@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。这是在我添加设置它的指令之前。无论如何,代码不会更改选项卡。实例化控制器似乎不正确,因为视图在没有单击按钮的情况下出现。该调用是否仅旨在返回指向它的链接而不实例化新对象?有没有更直接的方法来做到这一点?
我尝试了这个问题的答案:Switch tab bar programmatically in Swift。它产生了一个错误,说它 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
}
}
这是上面链接的解决方案的答案。它在链接到控件的控制器中工作正常,但在主控制器按钮操作方法中不工作。这让我觉得我已经实例化了该类的第二个实例。