swift - 无法修改 NSTabViewItem
问题描述
我可能会迷失在一杯水中,因为我不是经验丰富的开发人员,但我似乎无法实现简单的覆盖来修改 NSTabView 项目的大小。
- 我有一个选项卡视图控制器(样式 = 工具栏)
- 我有一个 Tabless 选项卡视图
- 我有 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 连接(而且我似乎无论如何都无法连接选项卡项)。如果这是一个微不足道的问题,请道歉,但我到处搜索并没有找到任何可以帮助我的东西。
谢谢
解决方案
你说:
- 我有一个 Tabless 选项卡视图
这是你的问题。AnNSTabView
仅询问其NSTabViewItem
本身是否负责绘制标签栏,但您有一个“Tabless”标签视图。(“Tabless”是拖入情节提要时的默认样式。)drawLabel
NSTabView
NSTabViewController
你还说:
- 我有一个选项卡视图控制器(样式 = 工具栏)
所以你甚至不希望标签视图绘制标签栏;您希望窗口工具栏中的项目选择选项卡(就像在 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
使该项目停止接收点击。
请注意,minSize
andmaxSize
属性仅在toolbarItem.view
设置时使用。
您最好的选择可能是自己管理工具栏,而不是尝试使用NSTabViewController
' 支持。
推荐阅读
- ssl - 使用 WinInet 的客户端身份验证(证书 + 私钥)
- python - 如何获得图像的主要颜色?
- javascript - jquery-modal 中的 Javascript 不起作用 - Laravel
- python - 为什么 `is` 运算符在脚本和 REPL 中的行为不同?
- javascript - 在 Express 中间件中丢失 ajax 数据
- python - 任何具有相关模型的基于类的视图或 Auth 包?
- android - 将 PagedList 与 Google 地图一起使用
- jquery - 下拉选择中的月份顺序不正确
- c - 计算 PPM 文件的平均 RGB 值
- python - GCP 任务队列死锁或线程问题