NGUI ——UILabel复制粘贴

在一次工作的需求中遇到一个很麻烦的问题:需求上要求UI上的文字不仅要支持鼠标长按选取文字内容可复制粘贴到输入框内,还要能支持长按shift键鼠标单击区域的文字复制粘贴到输入框。于是乎,我看了NGUI所有的组件,发现只有Input带有复制粘贴的功能,瞬间头都大了,总不能用Input来做吧,这也太奇怪了,然后就去看看Input的复制功能是如何实现的,参考了下UIInput的代码,把其中的复制功能提取出来,单独写了脚本做了些改进放到Label上,再给Label加上碰撞器,复制粘贴的效果就出来了!


看过UIInput的代码后发现所谓复制就是在Label下边创建了两张图片而已,一张图片就是一直闪个不停的光标,另一张则是文字被选中后的高亮背光图,只要获取到鼠标点击文字的位置,就可以在这个位置上添加一张光标图片,然后在获取鼠标经过的位置,又或者是获取鼠标下一次点击的位置,在这两个位置之间再添加一张高亮的背光图在Label上就可以了,后面只需要获取这个两个位置之间的文字内容就可以存到剪贴板中,最后在输入框内按下ctr+v键就可以把内容显示到上面了。注意:Label必须带有碰撞器和UIEventTrigger。

因为脚本写的有些乱,还未做优化,还望大家见谅,下面附上整个脚本供大家参考,欢迎大家提出宝贵意见以作后期改进。

using UnityEngine;
using System.Collections;
using System;

/// <summary>
/// 复制粘贴UILabel被选中的文字
/// </summary>
public class StringSelectionLabel : MonoBehaviour
{
    public Texture curTexture;//光标图片,默认白色图片
    public Color curColor = Color.white;//光标颜色
    public Color highlightColor = Color.white;//高亮部分颜色

    private UILabel uiLabel;
    private UITexture curUITexture;//光标
    private UITexture highlightUITexture;//高亮图片
    private int start = 0;
    private int end = 0;
    private bool isSelection = false;
    private bool isActive = false;
    private string selectStr = "";//选中的文字内容
    
    void Start() {
        uiLabel = gameObject.GetComponent<UILabel>();
        //添加U
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值