【问题标题】:How to make slider labels clickable [Flex 3]如何使滑块标签可点击 [Flex 3]
【发布时间】:2010-10-26 07:52:55
【问题描述】:

我有一个简单的滑块,只有 3 个选项。强迫用户拖动滑块上的小缩略图似乎很奇怪,而单击滑块旁边的 3 个实际标签之一会容易得多。有谁知道如何做到这一点?

【问题讨论】:

    标签: user-interface button label slider flex3


    【解决方案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/值。

    此外,当从舞台上移除 Slider 时,您可能需要添加一个“dispose”方法来从标签中移除 CLICK 事件侦听器。如果您不打算删除 Slider,这不是问题,但如果您是,我通常做的是创建一个名为 dispose 的方法并将我所有的手动删除逻辑放在那里(删除事件侦听器、取消监视/删除 ChangeWatchers )。然后我为组件的REMOVED_FROM_STAGE 事件分配一个侦听器,并从该侦听器调用dispose 方法。

    【讨论】:

    • 听起来很有趣。我会努力让它工作 - 谢谢!
    【解决方案2】:

    您确定滑块是在这种情况下使用的最佳组件吗?一般来说,当用户有大量连续选项可供选择时,将使用滑块,其中用户选择的精度并不重要(例如,音量滑块 - 音量为 51% 而不是 50%真的不会有太大的不同)。

    如果您只有三个选项,并且只允许用户选择这三个选项之一,我建议使用组合框或单选按钮组。

    【讨论】:

    • 嗨,滑块代表尺寸,从小 -> 中 -> 大。在这种情况下,滑块是有意义的,因为您正在使用滑块显示不断增加的大小。目前有 3 种固定尺寸,但将来可能会取消限制,它可以是 x 和 y 之间的任何尺寸。
    • 啊,好吧,我明白你为什么要采用这种方法了。话虽如此,我确实查看了 Flex 文档,但我认为没有一种简单的方法可以获得可点击的标签。滑块类只包含一个标签数组,这些标签对应于刻度。您可能有一些运气继承 Label 并添加点击侦听器,但我自己还没有尝试过。
    猜你喜欢
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2016-07-09
    • 2019-09-26
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多