我有一个简单的滑块,只有 3 个选项。强迫用户拖动滑块上的小缩略图似乎很奇怪,而单击滑块旁边的 3 个实际标签之一会容易得多。有谁知道如何做到这一点?
2 回答
这是一个很酷的问题。
Slider 使用的 Label 对象原来是 Label 的子类(称为 SliderLabel)。因此,最好的方法可能是继承 Slider 并将事件侦听器添加到标签。
我认为您可以在 commitProperties 方法或 updateDisplayList 方法中成功添加事件侦听器。我不确定一个是否比另一个更可取,但 commitProperties 似乎是更正确的选择。
因此,在您的 Slider 子类中:
override protected function commitProperties():void
{
super.commitProperties();
for(var i:int = 0; i < labelObjects.numChildren; i++)
{
if(!SliderLabel(labelObjects.getChildAt(i)).hasEventListener(MouseEvent.CLICK))
{
SliderLabel(labelObjects.getChildAt(i)).addEventListener(MouseEvent.CLICK,sliderLabelClickListener);
}
}
}
然后可能是这样的sliderLabelClickListener
:
private function sliderLabelClickListener(e:MouseEvent):void
{
dispatchEvent( new SliderLabelClickEvent(e.target) );
}
我认为您希望在那里有一个自定义事件,而不是发送一个常规事件Event
,因此您可以包含标签的名称/ID/值。
此外,当从舞台上移除 Slider 时,您可能希望放入一个“dispose”方法以从标签中移除 CLICK 事件侦听器。如果您不打算删除 Slider,这不是问题,但如果是,我通常会创建一个名为的方法dispose
并将我的所有手动删除逻辑放在那里(删除事件侦听器、取消监视/删除 ChangeWatchers)。然后我为组件的事件分配一个侦听器REMOVED_FROM_STAGE
并从该侦听器调用dispose
方法。
您确定滑块是在这种情况下使用的最佳组件吗?一般来说,当用户有大量连续选项可供选择时,将使用滑块,其中用户选择的精度并不重要(例如,音量滑块 - 音量为 51% 而不是 50%真的不会有太大的不同)。
如果您只有三个选项,并且只允许用户选择这三个选项之一,我建议使用组合框或单选按钮组。