1

我正在使用 AIR 2.0(很快将使用 Flash CS6 更新到 3.3)来创建 iPad 应用程序。我们有文本字段(经典、动态),有时包含一个或多个需要可点击的 htmlText 链接。在该程序的桌面版本中,所有文本都是可选的,并且链接很容易访问。我的问题是,我需要在 iPad 上将链接捣碎 20 次,然后它才会识别出有链接并在 Safari 中导航到它。另一个奇怪的事情是,没有一个文本似乎是可选择的——我无法让 iPad 光标、复制/粘贴菜单等显示出来。

我认为,通过阅读其他线程,URL 的点击区域只是文本本身的笔划......如果这是真的,我该怎么做才能增加点击区域?或者使文本可选择?有人建议在其他地方将影片剪辑放在 URL 后面,但这实际上是不可能的,因为这都是来自 XML 文件的动态文本。

我读过关于 StageText 但我认为这仅用于输入字段,这里不是这种情况。

我在 AS3 方面相当先进,但我更喜欢一个简单的解决方案,而不是重写大量代码。目前,我唯一能想到的就是获取 URL 并制作它,以便一旦您触摸文本字段上的任何位置,它就会导航到链接。但是,如果给定的文本字段中有超过 1 个 URL,这将崩溃。

有任何想法吗?

4

1 回答 1

5

我有这个完全相同的问题,它让我困惑了一段时间。这是我为获得所需行为所做的工作:

1)不要使用 TextEvent.LINK 的侦听器,而是在 TextField 上侦听 MouseEvent.CLICK(或 TouchEvent.TAP)。

例如。

var tf:TextField = new TextField();
tf.addEventListener(MouseEvent.CLICK, linkClicked);

2)在 linkClicked() 处理程序中,您使用 getCharIndexAtPoint() 来确定被点击的字符的索引,然后根据字符的 TextFormat 确定 URL。本文改编自 Colin Holgate 在 Adob​​e 论坛 ( http://forums.adobe.com/thread/231754 )上的帖子

public function linkClicked(e:MouseEvent):void {
    var idx:int = e.target.getCharIndexAtPoint(e.localX, e.localY);
    trace("Tapped:",idx);

    var tf:TextFormat = e.target.getTextFormat(idx);
    if(tf.url != "" && tf.url != null) {
        var linkURL:String = tf.url;
        trace(linkURL);

        // Hyperlink processing code here
        dispatchEvent(new UIEvent(UIEvent.LINK_TAPPED,tf.url));
    }
}

3) 最后一行 (dispatchEvent()) 将自定义事件发送到另一个函数以处理链接,但您可以在此处轻松内联代码。

我已经在运行 iOS6.1、使用 AIR3.5 构建的 iPad 3 上进行了测试。链接的响应速度更快,而且我发现自己不会在屏幕上捣碎试图击中文本的笔划!

于 2013-02-22T03:24:20.437 回答