Как предоставить индекс нажатой кнопки, которая создается динамически экземпляром? - PullRequest
2 голосов
/ 27 мая 2019
  1. Я пытаюсь передать индекс нажатой кнопки в Repeat (значение int) и написал это - gp.GetComponentInChildren () .onClick.AddListener (() => Repeat (репы));

  2. Но когда я нажимаю любую кнопку, я получаю последний индекс кнопки для всех. Я хочу знать, есть ли способ, я могу передать индекс той кнопки, которую я нажал в Repeat ()?

void chatDialogs() {

        foreach (Transform child in this.transform) {
            GameObject.Destroy (child.gameObject);
        }

        for (int i = 5; i > 0 ; i--) {
            int currentStep = Laststep - i;
            if (currentStep >= 0) {
                 gp = (GameObject)Instantiate (playerPreFab);
                 gp.transform.SetParent (this.transform);
            }
            gp.GetComponentInChildren<Button> ().onClick.AddListener(() => 
            Repeat(**transform.GetSiblingIndex()**));
        }
    public void Repeat(int speakstep) {
        Application.ExternalCall("textspeak", speakstep);
    }

в объекте spokstep Repeat () указатель нажатой кнопки должен быть передан, но он получает последний индекс в каждой нажатой кнопке.

1 Ответ

0 голосов
/ 27 мая 2019

Я думаю, вы можете сделать что-то вроде этого:

AddButtonListener(gp.GetComponentInChildren<Button> (), i);

внутри вашей for петли, когда AddButtonListener определяется как:

void AddButtonListener(Button b, int index)
{
    b.onClick.AddListener(()=>{Repeat(index)});
}

Таким образом, вы фиксируете индекс кнопки в функции слушателя (но я не уверен, как правильно назвать этот шаблон), и я написал это без фактического запуска. Надеюсь, у вас достаточно информации, чтобы она заработала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...