gpt4 book ai didi

swift - 无法修改 NSTabViewItem

转载 作者:行者123 更新时间:2023-11-28 14:34:22 24 4
gpt4 key购买 nike

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

  • 我有一个选项卡 View Controller (样式 = 工具栏)
  • 我有一个 Tables 标签 View
  • 我有 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
}
}

一切正常,除了子类化。选项卡出现,它们确实通过切换 View 进行操作,并且程序按预期运行。除了它不调整选项卡项的大小。永远不会到达子类 MyTabViewItem 中的代码(它永远不会按应有的方式打印 Draw!!。

我不明白我在这里错过了什么。我还没有读到任何要建立的 IB 连接(而且我似乎无法连接选项卡项)。如果这是一个微不足道的问题,请道歉,但我到处搜索但没有找到任何帮助我的东西。

谢谢

最佳答案

你说:

  • I have a Tabless Tab View

这是你的问题。如果 NSTabView 本身负责绘制标签栏,则 NSTabView 只会向 NSTabViewItem 请求 drawLabel,但是您有一个“Tabless”选项卡 View 。 (“当您将 NSTabViewController 拖入 Storyboard时,Tables 是默认样式。)

你还说:

  • I have a Tab View Controller (Style = toolbar)

所以你甚至不想让tab view画一个tab bar;您希望窗口工具栏中的项目选择选项卡(就像在 Xcode 的首选项窗口中一样)。

您自定义为选项卡创建的工具栏项目的能力是有限的。您可以继承 NSTabViewController 并覆盖 toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:,如下所示:

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) 😀"
}
return toolbarItem
}

但我发现进行其他更改效果不佳:

  • 设置 toolbarItem.image 对我来说效果不佳。
  • 设置 toolbarItem.view 使项目停止接收点击。

请注意,minSizemaxSize 属性仅在设置了 toolbarItem.view 时使用。

最好的办法可能是自己管理工具栏,而不是尝试使用 NSTabViewController 的支持。

关于swift - 无法修改 NSTabViewItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51012125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com