我有一个简单的滑块,只有3个选项。强制用户拖动滑块上的小缩略图似乎很奇怪,因为单击滑块侧面的3个实际标签之一会更容易。有谁知道如何做到这一点?
答案 0 :(得分:1)
这是一个很酷的问题。
Slider使用的Label对象原来是Label的子类(称为SliderLabel)。因此,最好的方法可能是将Slider子类化并将事件侦听器添加到标签中。
我认为您可以在commitProperties方法或updateDisplayList方法中成功添加事件侦听器。我不确定一个是否会优于另一个,但commitProperties似乎是 more 正确的选择。
所以,在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 /值。
此外,您可能需要放置一个'dispose'方法,以便在从舞台上移除Slider时从标签中删除CLICK事件侦听器。如果你不打算移除Slider,这不是问题,但如果你是,我通常做的是创建一个名为dispose
的方法并将所有手动删除逻辑放在那里(删除事件监听器,取消监视/删除ChangeWatchers)。然后我为组件的REMOVED_FROM_STAGE
事件分配一个监听器,并从该监听器调用dispose
方法。
答案 1 :(得分:0)
在这种情况下,您确定滑块是最好的组件吗?一般来说,当用户有大量连续选项可供选择时,使用滑块,用户选择的精度并不重要(例如音量滑块 - 体积为51%而不是50%真的不会有太大的区别。)
如果您只有三个选项,并且只允许用户选择这三个选项中的一个,我建议您使用组合框或单选按钮组。