Различные подсказки для разных частей компонента в Action Script - PullRequest
3 голосов
/ 01 августа 2011

Я хочу иметь всплывающую подсказку, которая показывает разные вещи, когда мышь наводится на другую часть компонента.Например, если это верхняя половина компонента, он покажет одну подсказку.Если мышь находится в нижней половине сегмента, то всплывающая подсказка будет другой.У меня есть код, который я написал, который возвращает панель со строкой. Этот код находится на другом компьютере, поэтому я опубликую код завтра.

Возможно ли в ActionScript иметь разные всплывающие подсказки (или, скорее, разные значения во всплывающей подсказке) для разных частей сегмента?

Код, который у меня есть на данный момент:

MyToolTip.mxml

<?xml version="1.0"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml"
implements="mx.core.IToolTip" 
alpha=".9" width="325" borderColor="black" borderStyle="solid"
cornerRadius="10" horizontalAlign="center">
<mx:Script><![CDATA[
[Bindable]
public var toolTipText:String = "";

public var _text:String;
[Bindable]
public function get text():String { return _text; } 
public function set text(value:String):void {}
]]></mx:Script>

<mx:HBox width="100%" height="100%">
<mx:Text text = "Text here" width = "50%"/>
<mx:Text text = "{toolTipText}" width = "50%"/>
</mx:HBox>  
</mx:Panel>

А затем мой компонент класса сценария действия, с которым я хочу, чтобы всплывающая подсказка была против.

public class MyComponent extends mx.containers.VBox {

    private var tt:MyToolTip 

    public function MyComponent() {
        this.addEventListener(ToolTipEvent.TOOL_TIP_CREATE, toolTipCreateHandler);
        this.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
        tt = new MyToolTip();
    }

    override protected function drawFigure():void {
        //Need to kick the TOOL_TIP_CREATE event...and needs to be a value (eg a SPACE). 
        //If blank then no tooltip is created 
        this.toolTip = " ";
        super.drawFigure();
    }

    private function toolTipCreateHandler(event:ToolTipEvent):void {
        var toolTipText:String = "tooltip1";
        eventToolTip.toolTipText = toolTipText;
        event.toolTip = tt;
    }

    private function mouseOverHandler(event:MouseEvent):void {
        //perhaps I need to be more efficient here and only fire
        //when the mouse goes into top half or bottom half
        //This does not appear to update the toolTipText in the view
        var halfwayUp:Number = getBounds(this).height  / 2;
        if (event.localY < halfwayUp) {
            eventToolTip.toolTipText = "tooltip2";
        }
        else {
            eventToolTip.toolTipText = "tooltip1";
        }           
    }
}
}

Любая помощь или указатели в том, как обновить всплывающую подсказку, когда онауже отображается будет здорово.

1 Ответ

2 голосов
/ 22 сентября 2011

Да, возможно, дело в том, чтобы узнать, как работают всплывающие подсказки:
Подсказки создаются при наведении курсора на компонент и уничтожаются при наведении курсора.Поэтому, если вы измените текст всплывающей подсказки во время ее отображения, вы не увидите изменения, потому что функция set toolTip() не создает новую подсказку, если она уже существует.Таким образом, решение состоит в том, чтобы уничтожить отображаемую подсказку и создать новую.Чтобы уничтожить всплывающую подсказку, вы можете установить ее значение в пустую строку.
Вот пример кода:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
mouseMove="application1_mouseMoveHandler(event)">
<mx:Script>
<![CDATA[
    import mx.managers.ToolTipManager;

    protected function application1_mouseMoveHandler(event:MouseEvent):void{
        if (mouseX < 100) {
            testButton.toolTip = ""
            testButton.toolTip = "on the left side";
        } else {
            testButton.toolTip = ""
            testButton.toolTip = "on the right side";

        }
    }

]]>
</mx:Script>
<mx:Button id="testButton" label="test" width="200" height="200" />
</mx:Application>

Примечание. Если вы хотите больше связываться с подсказками во Flex, вы можете получитьтекущая всплывающая подсказка с ToolTipManager.currentToolTip (и изменение ее свойств без уничтожения).

...