尝试使用安装了标签的uitextfield:
var label:UITextField = new UITextField();
label.text = "test";
label.selectable = true;
var contextMenu:ContextMenu = new ContextMenu();
contextMenu.clipboardMenu = true;
contextMenu.clipboardItems.copy = true;
contextMenu.clipboardItems.selectAll = true;
contextMenu.customItems = [new ContextMenuItem("Test Item"), new ContextMenuItem("Test Item 2")];
label.contextMenu = contextMenu;
addChild(label);
此外,您还可以扩展label,将上下文菜单直接应用到内部的uitextfield(此解决方案仅在air中有效,尽管您可以使用context menu istad of native menu,它在air和flash player中都有效):
package test
{
import mx.controls.Label;
import flash.display.NativeMenu;
import mx.core.UITextField;
import mx.core.mx_internal;
use namespace mx_internal;
public class LabelWithContextMenu extends Label
{
public function LabelWithContextMenu()
{
super();
}
override public function get contextMenu():NativeMenu
{
if (textField is UITextField)
return UITextField(textField).contextMenu;
else
return super.contextMenu;
}
override public function set contextMenu(cm:NativeMenu):void
{
if (textField == null)
createTextField(-1);
if (textField is UITextField)
UITextField(textField).contextMenu = cm;
else
super.contextMenu = cm;
}
}
}