Swift 无法修改NSTabViewItem

Swift 无法修改NSTabViewItem,swift,cocoa,nstabview,Swift,Cocoa,Nstabview,我可能会迷失在一杯水中,因为我不是一个经验丰富的开发人员,但我似乎无法实现一个简单的覆盖来修改NSTabView项目的大小 我有一个选项卡视图控制器(样式=工具栏) 我有一个tables选项卡视图 我有3个标签项。对于测试,我只将其中一个子类化为下面的子类 我已经创建了NSTabViewItem的一个新子类:MyTabViewItem,并对3个选项卡项之一进行了子类化。代码是: import Cocoa class MyTabViewItem: NSTabViewItem { o

我可能会迷失在一杯水中,因为我不是一个经验丰富的开发人员,但我似乎无法实现一个简单的覆盖来修改NSTabView项目的大小

  • 我有一个选项卡视图控制器(样式=工具栏)
  • 我有一个tables选项卡视图
  • 我有3个标签项。对于测试,我只将其中一个子类化为下面的子类
我已经创建了NSTabViewItem的一个新子类:MyTabViewItem,并对3个选项卡项之一进行了子类化。代码是:

import Cocoa

class MyTabViewItem: NSTabViewItem {

    override func drawLabel(_ shouldTruncateLabel: Bool, in labelRect: NSRect) {

        var size = self.sizeOfLabel(false)
        size.width = 180 
        print("Draw!!")         
    }


    override func sizeOfLabel(_ computeMin: Bool) -> NSSize {

        var size = super.sizeOfLabel(false)      
        size.width = 180      
        print("Draw!!")
        return size      
    }       
}
除了子类化之外,一切都正常。选项卡出现时,它们通过切换视图进行操作,程序按应有的方式运行。但它不会调整选项卡项的大小。子类MyTabViewItem中的代码永远不会到达(它永远不会像应该的那样打印Draw!!)

我无法理解我在这里遗漏了什么。我没有读到任何IB连接(而且我似乎无论如何都无法连接选项卡项)。如果这是一个微不足道的问题,请道歉,但我到处都搜索了,没有找到任何帮助我的东西

谢谢你

你说:

  • 我有一个tables选项卡视图
这是您的问题。
NSTabView
仅要求
NSTabViewItem
drawLabel
,前提是
NSTabView
本身负责绘制选项卡栏,但您有一个“tables”选项卡视图。(
NSTabViewController
拖动到情节提要中时,“tables”是默认样式。)

你还说,

  • 我有一个选项卡视图控制器(样式=工具栏)
因此,您甚至不希望选项卡视图绘制选项卡栏;您希望窗口工具栏中的项目选择选项卡(如Xcode的首选项窗口)

您自定义为选项卡创建的工具栏项目的能力有限。您可以子类化
NSTabViewController
并覆盖
工具栏:itemForItemIdentifier:Willbeinsertedintoolbar:
,如下所示:

override func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
    let toolbarItem = super.toolbar(toolbar, itemForItemIdentifier: itemIdentifier, willBeInsertedIntoToolbar: flag)
    if
        let toolbarItem = toolbarItem,
        let tabViewItem = tabViewItems.first(where: { ($0.identifier as? String) == itemIdentifier.rawValue })
    {
        toolbarItem.label = "\(tabViewItem.label) I have also subclassed the NSTabViewController as follows:

import Cocoa

class MyTabViewController: NSTabViewController {

    @IBOutlet weak var TradingTabItem: MyTabViewItem!

    override func viewDidLoad() {
        super.viewDidLoad()
        print("Loaded Tab View")
        TradingTabItem.label = "New"

        // Do view setup here.

    }

}
override func toolbar(\utoolbar:NSToolbar,itemforiteminidentifier itempidentifier:NSToolbarItem.Identifier,willbeinsertedintoolbar flag:Bool)->NSToolbarItem{
让toolbarItem=super.toolbar(工具栏,itemForItemIdentifier:itemIdentifier,Willbeinsertedintoolbar:flag)
如果
设toolbarItem=toolbarItem,
让tabViewItem=tabViewItems.first(其中:{($0.identifier as?String)==itemIdentifier.rawValue})
{

toolbarItem.label=“\(tabViewItem.label)我还将NSTabViewController子类化如下:


现在发生的情况是,我的子类(3i子类中唯一的一个)中的tab项将其标签字符串更改为New。但是,即使我将该项添加为此处的IBOutlet,它仍然不会更改(并且未达到重写的sizeOfLabel函数).

您是否在IB中将该选项卡视图项的类设置为
MyTabViewItem
?是的。该类在IB中可识别,我已将其设置为该类。我的下一步是重写
-initWithIdentifier
构造函数,设置断点,并查看是否正在创建自定义对象。如果没有,这就是您的问题(查看IB)。如果是,则检查是否设置了
标识符
视图
、和
选项卡视图
属性,表明此选项卡视图项已安装到选项卡视图中。或者,只需断开应用程序并使用调试视觉层次工具查看您的视图对象是您期望的位置。感谢您的评论。我不确定我是否理解所有内容,但是选项卡项正在创建并按预期工作。当我单击不同选项卡时,视图将按应有的方式显示。我似乎无法修改项目的宽度。下面我将发布我刚刚插入的另一段代码ed似乎做了些什么,但不是我需要的全部。