1

私は AIR 2.0 を使用しています (まもなく Flash CS6 で 3.3 に更新されます)。iPad アプリを作成します。クリック可能にする必要がある 1 つまたは複数の htmlText リンクを含むテキストフィールド (クラシック、動的) があります。プログラムのデスクトップ バージョンでは、すべてのテキストが選択可能で、リンクに簡単にアクセスできます。私の問題は、リンクがあることを認識してSafariでナビゲートする前に、iPadでリンクを20回ほどマッシュアップする必要があることです。もう 1 つの奇妙な点は、どのテキストも選択できないように見えることです。iPad カーソル、コピー/貼り付けメニューなどが表示されません。

他のスレッドを読んでいると、URL のヒット領域はテキスト自体のストロークにすぎないと思います...それが本当なら、ヒット領域を増やすにはどうすればよいですか? または、テキストを選択可能にしますか? URL の後ろにムービークリップを配置することが他の場所で提案されましたが、これはすべて XML ファイルからの動的テキストであるため、実際には不可能です。

StageText について読んだことがありますが、これは入力フィールドにのみ使用されると思いますが、ここではそうではありません。

私は AS3 にかなり精通していますが、大量のコードを書き直すよりも簡単な解決策を好みます。現時点で考えられる唯一のことは、URL を取得して、テキストフィールドのどこかをタッチするとすぐにリンクに移動するようにすることです。ただし、特定のテキストフィールドに複数の 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 を特定します。これは、アドビ フォーラム ( http://forums.adobe.com/thread/231754 )の Colin Holgate による投稿を基にしています。

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 に答える