_xiaofang/xiaofang/Assets/Script/UI/ZZZZZZ/OpcOrder2.cs

130 lines
4.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class OpcOrder2 : MonoBehaviour
{
public Dropdown dropdown; // Dropdown 组件
private string originalText; // 存储原始显示的文字
public static OpcOrder2 opcOrder2;
public string defaultOption = "不想上班!"; // 默认选项
private bool isDropdownInitialized = false;
private void Start()
{
// 初始化 Dropdown
if (dropdown == null)
{
dropdown = GetComponent<Dropdown>();
}
// 清空默认选项
dropdown.options.Clear();
// 添加默认显示的选项
dropdown.options.Add(new Dropdown.OptionData(defaultOption)); // 默认选项A
dropdown.captionText.text = defaultOption; // 设置默认显示文字
// 初始化下拉选项(不包括 A
dropdown.options.Add(new Dropdown.OptionData("选项 B"));
dropdown.options.Add(new Dropdown.OptionData("选项 C"));
dropdown.options.Add(new Dropdown.OptionData("选项 D"));
// 添加值变化事件
dropdown.onValueChanged.AddListener(OnDropdownValueChanged);
// 初始化绑定选项的点击事件
BindToggleEvents();
}
// 设置默认选项文本,外部可以调用这个方法改变默认文本
public string SetText(string str)
{
defaultOption = str;
dropdown.captionText.text = defaultOption; // 设置默认选项的显示文本
return str;
}
// 当下拉框的值改变时触发
private void OnDropdownValueChanged(int index)
{
if (isDropdownInitialized)
{
// 更新下拉框显示的文字为选中的选项
// 但是不改变默认选项的值
dropdown.captionText.text = dropdown.options[index].text;
// 执行自定义逻辑
Debug.Log($"点击了选项:{dropdown.options[index].text}");
}
isDropdownInitialized = true;
}
// 动态绑定选项的 Toggle 点击事件
private void BindToggleEvents()
{
// 获取 Dropdown 的 Template下拉项模板
Transform dropdownTemplate = dropdown.transform.Find("Template");
if (dropdownTemplate != null)
{
Transform viewport = dropdownTemplate.Find("Viewport");
if (viewport != null)
{
Transform content = viewport.Find("Content");
if (content != null)
{
// 遍历 Content 下的所有子物体(即下拉列表中的选项)
foreach (Transform option in content)
{
Toggle toggle = option.GetComponent<Toggle>();
if (toggle != null)
{
string optionText = option.GetComponentInChildren<Text>().text;
// 为每个选项绑定点击事件
toggle.onValueChanged.AddListener((isOn) =>
{
if (isOn)
{
HandleOptionClick(optionText);
toggle.isOn = false; // 重置 Toggle 状态,防止选项保持选中
}
});
}
}
}
}
}
else
{
Debug.LogWarning("未找到 Dropdown 的 Template 部分,无法绑定点击事件!");
}
}
// 处理选项点击逻辑
private void HandleOptionClick(string optionText)
{
Debug.Log($"点击了选项:{optionText}");
// 根据点击的选项执行不同的逻辑
switch (optionText)
{
case "选项 B":
Debug.Log("执行选项 B 的逻辑!");
break;
case "选项 C":
Debug.Log("执行选项 C 的逻辑!");
break;
case "选项 D":
Debug.Log("执行选项 D 的逻辑!");
break;
default:
Debug.LogWarning($"未处理的选项:{optionText}");
break;
}
}
}