NSSegmentedCell子类和自定义几何/布局不可能?

时间:2014-04-25 01:11:25

标签: objective-c macos cocoa subclass nssegmentedcontrol

两个子类的故事

Ben Stock

序言

我正在制作一套非常漂亮的控件,根据他们使用的窗口类型自动改变它们的外观(例如,如果你在普通窗口中按下按钮,它看起来像任何其他标准的Aqua按钮。但是,如果你将它放在NSPanel上,窗口面具为NSHUDWindowMask,它会自动将其样式切换为在HUD背景上看起来很好。到目前为止,我已经将NSButtonNSTextFieldNSSliderNSSearchField分为子类。昨晚我开始NSTabView,只是被猛烈抨击由于缺乏可定制性。它是屁股真正的痛苦,但我是开发人员,所以我常常找到自己的方式。我认为首先要做的是添加一个实例NSSegmentedControl取代NSTabView使用的私人标签。到目前为止,非常好。我已经选择了按钮,它们会在新的NSTabViewItem时自动更新被添加,它们就像真实一样。

痛苦开始......

最后,我开始设计我的片段,并且......我已经把自己弄到了‽我应该已经进入表演或其他什么。 Objective-C的发展正在慢慢耗尽我的生命。无论我做什么,跟踪区域"当我的细分受众群宽度发生变化时,NSSegmentedCell使用似乎不会更新。所以当我的宽度改变时,我的作品也会这样。但是,实际的跟踪区域不会更新(即使我覆盖-updateTrackingAreas。它很难解释,所以我决定在背后绘制我的段矩形在super -drawSegment:inFrame:withViewsuper所绘制的屏幕前面。这里是我在底层跟踪区域上绘制艺术品的屏幕截图:

A HUD Panel in Mac OS X displaying debug rectangles.

此处-cellSize的实施位于我的细分受众群之上:

enter image description here

我试过压倒我能想到的一切。以下是我已经覆盖(并且未被覆盖)的一些方法:

  • NSSegmentedCell-cellSizeForBounds:
  • NSSegmentedCell-sizeToFit
  • NSSegmentedControl-intrinsicContentSize
  • NSSegmentedControl-setWidth:forSegment:
  • NSSegmentedControlCell / -startTrackingAt:inView:
  • NSSegmentedCell-continueTracking:at:inView:
  • NSSegmentedCell-stopTracking:at:inView:mouseIsUp:
  • NSSegmentedCell({{1}})

此时,上面列表中的某些方法仍在使用我的覆盖,有些则不是。我已经混合和匹配,删除,简化,重写和重构,无论我做什么,底层矩形都不会改变。我和下一个人一样爱苹果,但他们对定制的看法需要改变。我无法理解在实施所有这些愚蠢的控件时会发生什么。更不用说我仍然无法完全围绕自动布局(这是关于最开放的 - " auto"我曾经有过的事情处理过),但那是另一天的帖子。无论如何,如果有人能帮助一个brotha,我会非常感激。很抱歉咆哮和感谢阅读!

P.S。这些都没有完成,所以请不要在几个像素缺陷上太难。 ; - )

0 个答案:

没有答案