using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class UI_ExamPanel : BasePanel { public string jsonFileName = "题目"; // JSON文件名 Root Root = new Root(); public RectTransform Rigcontent; public ToggleGroup ToggleGroup; public UI_Topicitem UI_Topicitem; public Button PreviousQuestion_Btn; public Button NextQuestion_Btn; public Toggle[] toggles; public TextMeshProUGUI topicetype; public TextMeshProUGUI topicText;//题目 public TextMeshProUGUI TopicType_Text; public TextMeshProUGUI[] topicLabel;//题目选项 private List questionToggles = new List(); // 动态生成的题目Toggle列表 private int curIndex; protected override void Awake() { base.Awake(); int index = 0; // 用于跟踪当前是第几个Toggle Root = JsonManager.LoadData(jsonFileName); foreach (var tmxh in Root.choose) { var item = Instantiate(UI_Topicitem, Rigcontent); item.Init(tmxh.topiceNumber); Toggle toggle = item.GetControl("Toggle"); toggle.group = ToggleGroup; questionToggles.Add(toggle); int currentIndex = index; toggle.onValueChanged.RemoveAllListeners(); toggle.onValueChanged.AddListener((ison) => { if (ison) { Debug.Log($"Toggle选中:{currentIndex}"); fun(currentIndex); } }); if (index == 0) toggle.isOn = true; index++; ToggleGroup.allowSwitchOff = false; UpdateQuestionUI(); } //// 确保 ToggleGroup 状态正确 //ToggleGroup.allowSwitchOff = false; //ToggleGroup.SetAllTogglesOff(); //UpdateQuestionUI(); } // 更新题目UI private void UpdateQuestionUI() { if (curIndex < 0 || curIndex >= Root.choose.Count) return; var currentQuestion = Root.choose[curIndex]; // 更新题目类型 bool isJudgment = currentQuestion.topicetype == "1"; topicetype.text = isJudgment ? "[判断题]" : "[选择题]"; TopicType_Text.text = isJudgment ? "判断题" : "选择题"; // 显示/隐藏选项 toggles[2].gameObject.SetActive(!isJudgment); toggles[3].gameObject.SetActive(!isJudgment); // 更新题目文本和选项 topicText.text = currentQuestion.topiceName; topicLabel[0].text = currentQuestion.chooseA; topicLabel[1].text = currentQuestion.chooseB; topicLabel[2].text = currentQuestion.chooseC; topicLabel[3].text = currentQuestion.ChooseD; // 更新按钮状态 PreviousQuestion_Btn.gameObject.SetActive(curIndex > 0); NextQuestion_Btn.gameObject.SetActive(curIndex < Root.choose.Count - 1); // 选中当前题目的Toggle if (questionToggles.Count > curIndex) { questionToggles[curIndex].isOn = true; } } private void SwitchQuestion(int offset) { int newIndex = curIndex + offset; if (newIndex < 0 || newIndex >= questionToggles.Count) return; curIndex = newIndex; questionToggles[curIndex].isOn = true; UpdateQuestionUI(); } private void fun(int index_) { Debug.Log(index_); if (Root.choose[index_].topicetype == "1") { topicetype.text = "[判断题]"; TopicType_Text.text = "判断题"; toggles[2].gameObject.SetActive(false); toggles[3].gameObject.SetActive(false); } else { topicetype.text = "[选择题]"; TopicType_Text.text = "选择题"; for (int i = 0; i < toggles.Length; i++) { toggles[i].gameObject.SetActive(true); } } curIndex = index_; if (index_ == 0) { PreviousQuestion_Btn.gameObject.SetActive(false); } else if (index_ == Root.choose.Count - 1) { NextQuestion_Btn.gameObject.SetActive(false); } else { PreviousQuestion_Btn.gameObject.SetActive(true); NextQuestion_Btn.gameObject.SetActive(true); } for (int i = 0; i < Root.choose.Count; i++) { topicText.text = Root.choose[index_].topiceName; topicLabel[0].text = Root.choose[index_].chooseA; topicLabel[1].text = Root.choose[index_].chooseB; topicLabel[2].text = Root.choose[index_].chooseC; topicLabel[3].text = Root.choose[index_].ChooseD; }; } public override void ShowMe() { base.ShowMe(); } public override void HideMe() { base.HideMe(); } protected override void OnClick(string btnName) { Debug.Log(btnName); switch (btnName) { case "retrun_Btn": Bootstrap.Instance.scenesManager.LoadSceneAsyn( "MenuScene", () => { Bootstrap.Instance.uiManager.ShowPanel(this, E_UI_Layer.Top, (panel) => { Bootstrap.Instance.uiManager.ShowPanel(this, E_UI_Layer.Bot, (panel) => { Debug.Log("UI_ExamPanel显示"); Bootstrap.Instance.uiManager.HidePanel(); Bootstrap.Instance.uiManager.HidePanel(); }); }); }); break; case "PreviousQuestion_Btn": SwitchQuestion(-1); break; case "NextQuestion_Btn": SwitchQuestion(1); break; } } }