Ben Stock
我正在制作一套非常漂亮的控件,根据他们使用的窗口类型自动改变它们的外观(例如,如果你在普通窗口中按下按钮,它看起来像任何其他标准的Aqua按钮。但是,如果你将它放在NSPanel
上,窗口面具为NSHUDWindowMask
,它会自动将其样式切换为在HUD背景上看起来很好。到目前为止,我已经将NSButton
,NSTextField
,NSSlider
和NSSearchField
分为子类。昨晚我开始NSTabView
,只是被猛烈抨击由于缺乏可定制性。它是屁股真正的痛苦,但我是开发人员,所以我常常找到自己的方式。我认为首先要做的是添加一个实例NSSegmentedControl
取代NSTabView
使用的私人标签。到目前为止,非常好。我已经选择了按钮,它们会在新的NSTabViewItem
时自动更新被添加,它们就像真实一样。
最后,我开始设计我的片段,并且......我已经把自己弄到了‽我应该已经进入表演或其他什么。 Objective-C的发展正在慢慢耗尽我的生命。无论我做什么,跟踪区域"当我的细分受众群宽度发生变化时,NSSegmentedCell
使用似乎不会更新。所以当我的宽度改变时,我的作品也会这样。但是,实际的跟踪区域不会更新(即使我覆盖-updateTrackingAreas
。它很难解释,所以我决定在背后绘制我的段矩形在super
-drawSegment:inFrame:withView
中super
所绘制的屏幕前面。这里是我在底层跟踪区域上绘制艺术品的屏幕截图:
此处-cellSize
的实施位于我的细分受众群之上:
我试过压倒我能想到的一切。以下是我已经覆盖(并且未被覆盖)的一些方法:
NSSegmentedCell
(-cellSizeForBounds:
)NSSegmentedCell
(-sizeToFit
)NSSegmentedControl
(-intrinsicContentSize
)NSSegmentedControl
(-setWidth:forSegment:
)NSSegmentedControl
(Cell
/ -startTrackingAt:inView:
)NSSegmentedCell
(-continueTracking:at:inView:
)NSSegmentedCell
(-stopTracking:at:inView:mouseIsUp:
)NSSegmentedCell
({{1}})此时,上面列表中的某些方法仍在使用我的覆盖,有些则不是。我已经混合和匹配,删除,简化,重写和重构,无论我做什么,底层矩形都不会改变。我和下一个人一样爱苹果,但他们对定制的看法需要改变。我无法理解在实施所有这些愚蠢的控件时会发生什么。更不用说我仍然无法完全围绕自动布局(这是关于最开放的 - " auto"我曾经有过的事情处理过),但那是另一天的帖子。无论如何,如果有人能帮助一个brotha,我会非常感激。很抱歉咆哮和感谢阅读!
P.S。这些都没有完成,所以请不要在几个像素缺陷上太难。 ; - )