UGUI_Dropdown 多次点击同一项无回调?

栏目: ASP.NET · 发布时间: 5年前

内容简介:截止目前Unity2018.3.3版本下的UGUI Dropdown依旧如题。当然,目前的功能是基本能满足大部分场景应用的。但如果你需要每次点击都有回调的话,那么,你就需要扩展或者重写Dropdown。

截止目前Unity2018.3.3版本下的UGUI Dropdown依旧如题。

当然,目前的功能是基本能满足大部分场景应用的。

但如果你需要每次点击都有回调的话,那么,你就需要扩展或者重写Dropdown。

我们新建一个类:DropdownExtent,并且让它继承Dropdown,然后重写OnPointerClick:

using UnityEngine.EventSystems;
using UnityEngine.UI;

public class DropdownExtend : Dropdown
{
public bool AlwaysCallback = false;
public void Show()
{
base.Show();
var toggleRoot = transform.Find("Dropdown List/Viewport/Content");
var toggleList = toggleRoot.GetComponentsInChildren<Toggle>(false);
foreach (var temp in toggleList)
{
temp.onValueChanged.RemoveAllListeners();
temp.isOn = false;
var temp1 = temp;
temp.onValueChanged.AddListener(x => OnSelectItemExtend(temp1));
}
}

public override void OnPointerClick(PointerEventData eventData)
{
Show();
}

public void OnSelectItemExtend(Toggle toggle)
{
if (!toggle.isOn)
{
toggle.isOn = true;
return;
}
var selectedIndex = -1;
var tr = toggle.transform;
var parent = tr.parent;
for (var i = 0; i < parent.childCount; i++)
{
if (parent.GetChild(i) != tr) continue;
selectedIndex = i - 1;
break;
}
if (selectedIndex &lt; 0)
return;
if (value == selectedIndex && AlwaysCallback)
onValueChanged.Invoke(value);
else
value = selectedIndex;
Hide();
}
}
using UnityEngine.EventSystems;
using UnityEngine.UI;
 
public class DropdownExtend : Dropdown
{
public bool AlwaysCallback = false;
public void Show()
{
base.Show();
var toggleRoot = transform.Find("Dropdown List/Viewport/Content");
var toggleList = toggleRoot.GetComponentsInChildren<Toggle>(false);
foreach (var temp in toggleList)
{
temp.onValueChanged.RemoveAllListeners();
temp.isOn = false;
var temp1 = temp;
temp.onValueChanged.AddListener(x => OnSelectItemExtend(temp1));
}
}
 
public override void OnPointerClick(PointerEventData eventData)
{
Show();
}
 
public void OnSelectItemExtend(Toggle toggle)
{
if (!toggle.isOn)
{
toggle.isOn = true;
return;
}
var selectedIndex = -1;
var tr = toggle.transform;
var parent = tr.parent;
for (var i = 0; i < parent.childCount; i++)
{
if (parent.GetChild(i) != tr) continue;
selectedIndex = i - 1;
break;
}
if (selectedIndex < 0)
return;
if (value == selectedIndex && AlwaysCallback)
onValueChanged.Invoke(value);
else
value = selectedIndex;
Hide();
}
}

测试代码:

using UnityEngine;

public class Test : MonoBehaviour
{
public DropdownExtend _dropdownEx;
void Start()
{
_dropdownEx.AlwaysCallback = true;
_dropdownEx.onValueChanged.AddListener(OnChanged);
}

private void OnChanged(int index)
{
Debug.Log(index);
}
}
using UnityEngine;
 
public class Test : MonoBehaviour
{
public DropdownExtend _dropdownEx;
void Start()
{
_dropdownEx.AlwaysCallback = true;
_dropdownEx.onValueChanged.AddListener(OnChanged);
}
 
private void OnChanged(int index)
{
Debug.Log(index);
}
}

说明:

  • 扩展类将替换掉原来的Dropdown组件,重新关联属性面板上的引用。

UGUI_Dropdown 多次点击同一项无回调?


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

链接

链接

[美]艾伯特-拉斯洛•巴拉巴西 (Albert-László Barabási) / 沈华伟 / 浙江人民出版社 / 2013-8-1 / 59.90元

[内容简介] ★《链接》是《爆发》的作者,艾伯特-拉斯洛•巴拉巴西的成名之作,同时也是复杂网络的奠基之作,社交网络的入门之作。巴拉巴西之前,随机网络理论一直主导者我们的网络思维,是巴拉巴西第一个证明了,我们不是生活在随机世界里,真实网络是无尺度的。 ★巴拉巴西在书中追溯了网络的数学起源,分析了社会学家在此基础上得出的研究成果,最后提出自己的观点:我们周围的复杂网络,从鸡尾酒会、恐怖组织......一起来看看 《链接》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试