Unity - один обратный вызов Dropdown для нескольких компонентов Dropdown - PullRequest
0 голосов
/ 27 мая 2020

У меня есть пользовательский интерфейс с несколькими раскрывающимися элементами управления, каждый из которых влияет на один из массива или элементов. Я использую onValueChanged (int index), каждый из которых подключен к своему собственному слушателю (selected01 (), selected02 () ... et c).

Это немного беспорядочно. Было бы намного лучше иметь один выбранный обратный вызов (экземпляр Dropdown, int index), который обрабатывает их все. Обратный вызов идентифицирует элемент управления из параметра экземпляра и воздействует на соответствующий элемент массива.

Я не понимаю, как это сделать - onValueChanged () предоставляет только индекс, а не источник. Тем не менее, я уверен, что видел решение этой проблемы, возможно, с участием делегата, но сейчас не могу его найти.

Есть предложения? (То же самое может относиться к любому массиву элементов управления, а не только к раскрывающимся спискам).

1 Ответ

1 голос
/ 27 мая 2020

Насколько я мог видеть, onValueChanged в любом случае возвращает экземпляр DropDown, который был изменен.


Возможно, это отличается в версии, которую вы используете.

Вы можете просто создать свой собственный метод слушателя и сделать, например,

public DropDown[] dropdowns;

private void HandleChange(DropDown dropdown, int newIndex)
{
    // Your stuff here
}

...

foreach(var dropdown in dropdowns)
{
    var currentDropdown = dropdown;
    currentDropdown.onValueChanged.AddListener((newIndex) => { HandleChange(currentDropdown, newIndex); });
}
...